Программа morseEncoder на C, но с логической ошибкой

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

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

#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 * to char или наоборот.

2 ответа

const char *phrase;

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

scanf("%s",phrase);

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

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

char phrase[100];

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

char *phrase=malloc(100);

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

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

Проблема в том, что я использую символ в качестве входных данных.

scanf("%c",phrase);

Итак, даже если пользователь вводит строку, сохраняется только первый символ. Изменение его на запрос строки решило логическую ошибку.

scanf("%s",phrase);
Другие вопросы по тегам