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);