Программа morseEncoder на C, но с логической ошибкой - PullRequest
0 голосов
/ 03 декабря 2018

Я написал программу "Morse Encoder" на C. Я могу выполнить код, ошибок нет, но есть логическая ошибка.Это не дает того, что я хочу.Пользователь вводит что-то в виде строки, затем нажимает Enter, но вывод не происходит.

Вот мой код.Посмотри на это.Может быть, вы заметили, что я сделал не так.

#include <stdio.h>
#include <string.h>
#define SIZE 100

const char* morseEncode(char x){
    switch(x){
        case 'A':
        case 'a':
            return ".-";
        case 'B':
        case 'b':
            return "-...";
        case 'C':
        case 'c':
        case 'Ç':
        case 'ç':
            return "-.-.";
        case 'D':
        case 'd':
            return "-..";
        case 'E':
        case 'e':
            return ".";
        case 'F':
        case 'f':
            return "..-.";
        case 'G':
        case 'g':
        case 'Ğ':
        case 'ğ':
            return "--.";
        case 'H':
        case 'h':
            return "....";
        case 'I':
        case 'ı':
        case 'İ':
        case 'i':
            return "..";
        case 'J':
        case 'j':
            return ".---";
        case 'K':
        case 'k':
            return "-.-";
        case 'L':
        case 'l':
            return ".-..";
        case 'M':
        case 'm':
            return "--";
        case 'N':
        case 'n':
            return "-.";
        case 'O':
        case 'o':
            return "---";
        case 'Ö':
        case 'ö':
            return "---.";
        case 'P':
        case 'p':
            return ".--.";
        case 'Q':
        case 'q':
            return "--.-";
        case 'R':
        case 'r':
            return ".-.";
        case 'S':
        case 's':
        case 'Ş':
        case 'ş':
            return "...";
        case 'T':
        case 't':
            return "-";
        case 'U':
        case 'u':
            return "..-";
        case 'Ü':
        case 'ü':
            return "..--";
        case 'V':
        case 'v':
            return "...-";
        case 'W':
        case 'w':
            return ".--";
        case 'X':
        case 'x':
            return "-..-";
        case 'Y':
        case 'y':
            return "-.--";
        case 'Z':
        case 'z':
            return "--..";
        default:
            return NULL;
    }
}

void morseCode (const char *p){
    for(int i=0;p[i];i++){
        printf("%s/",morseEncode(p[i]));
    }
}

int main() {
    char phrase[SIZE];
    printf("Code is non-sensitive to letters.\nEnter phrase: ");
    scanf("%c",phrase);
    puts("");
    morseCode(phrase);
}

Я думаю, что я сделал что-то не так в преобразованиях, таких как const char * в char или наоборот.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Я выслушал все ответы и заметил, что разместил этот вопрос, не задумываясь об этом.Ошибки, которые я сделал, настолько глупы.Теперь я исправил свой код, но осталась только одна вещь - это часть цикла.Программа возвращает только первый алфавит.Я не мог исправить это, к сожалению, хотя я все еще пытаюсь.Если кто-нибудь может помочь, я буду признателен.

0 голосов
/ 03 декабря 2018
const char *phrase;

phrase неинициализирован, поэтому, когда вы делаете

scanf("%s",phrase);

, вы записываете в какое-то случайное место в памяти, вызывая неопределенное поведение.

Вам необходимо выделить местодля вашей строки в первую очередь.Либо в виде массива

char phrase[100];

, либо путем выделения памяти

char *phrase=malloc(100);

А также квалификатор const в объявлении не имеет большого смысла, так как вы изменяете содержимое при передаче его scanf.Хорошо иметь эту функцию, так как функции не изменяют значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...