C中的morseEncoder程序但有逻辑错误
A morseEncoder program in C but have a logic error
我用C写了一个"Morse Encoder"程序,我可以执行代码,没有错误,但有逻辑错误。它没有给我想要的东西。用户输入字符串形式的内容然后按回车但没有输出。
这是我的代码。看看它。也许你注意到我做错了什么。
#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 或反之亦然的过程中做错了。
const char *phrase;
phrase
未初始化,所以当您执行
scanf("%s",phrase);
您正在写入内存中的某个随机位置,导致未定义的行为。
您需要先为您的字符串分配 space。要么作为数组
char phrase[100];
或者通过分配内存
char *phrase=malloc(100);
而且声明中的 const
限定符也没有什么意义,因为在将它传递给 scanf
时更改了内容。将它放在函数上很好,因为函数不会更改值。
问题是我要求一个字符作为输入。
scanf("%c",phrase);
因此,即使用户输入一个字符串,它也只保存第一个字符。将其更改为请求字符串解决了逻辑错误。
scanf("%s",phrase);
我用C写了一个"Morse Encoder"程序,我可以执行代码,没有错误,但有逻辑错误。它没有给我想要的东西。用户输入字符串形式的内容然后按回车但没有输出。
这是我的代码。看看它。也许你注意到我做错了什么。
#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 或反之亦然的过程中做错了。
const char *phrase;
phrase
未初始化,所以当您执行
scanf("%s",phrase);
您正在写入内存中的某个随机位置,导致未定义的行为。
您需要先为您的字符串分配 space。要么作为数组
char phrase[100];
或者通过分配内存
char *phrase=malloc(100);
而且声明中的 const
限定符也没有什么意义,因为在将它传递给 scanf
时更改了内容。将它放在函数上很好,因为函数不会更改值。
问题是我要求一个字符作为输入。
scanf("%c",phrase);
因此,即使用户输入一个字符串,它也只保存第一个字符。将其更改为请求字符串解决了逻辑错误。
scanf("%s",phrase);