Программа 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);