首页 > 解决方案 > C 中的 morseEncoder 程序但有逻辑错误

问题描述

我用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* 到 char 或反之亦然的转换中做错了。

标签: cmorse-code

解决方案


const char *phrase;

phrase未初始化,所以当你这样做时

scanf("%s",phrase);

您正在写入内存中的某个随机位置,导致未定义的行为。

您需要首先为您的字符串分配空间。要么作为一个数组

char phrase[100];

或通过分配内存

char *phrase=malloc(100);

并且const声明中的限定符也没有什么意义,因为您在将内容传递给scanf. 把它放在函数上很好,因为函数不会改变值。


推荐阅读