比较输入中的字符串

标签 c alphabetical letter morse-code converters

我要求用户选择一个选项。然后,当转换为字母时,命令strcmp总是得到 -1 。我尝试检查正在比较的内容,发现字符串正在获取“\ninput”而不是“input”。我想知道为什么会发生这种情况

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

static char *alfa[] = {
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "H",
    "I",
    "J",
    "K",
    "L",
    "M",
    "N",
    "O",
    "P",
    "Q",
    "R",
    "S", "T",
    "U",
    "V",
    "W",
    "X",
    "Y",
    "Z",
};

static char *morse[] = {
    ".-X",   //A
    "-...X", //B
    "-.-.X", //C
    "-..X",  //D
    ".X",    //E
    "..-.X", //F
    "--.X",  //G
    "....X", //H
    "..X",   //I
    ".---X", //J
    "-.-X",  //K
    ".-..X", //L
    "--X",   //M
    "-.X",   //N
    "---X",  //O
    ".--.X", //P
    "--.-X", //Q
    ".-.X",  //R
    "...X",  //S
    "-X",    //T
    "..-X",  //U
    "...-X", //V
    ".--X",  //W
    "-..-X", //X
    "-.--X", //Y
    "--..X" //Z
};

void morseToAlfa(){
    int i=0;char string[100];
    int cont=0;
    char*v;char o = ' ';
    printf("Type morse code:\n") ;
    while (o != 'X'){
        o = toupper(getc(stdin));
        string[i] = o;
        i++;
    }

    printf("String input: %s\n",string);
    while(strcmp(string,morse[cont]) != 0 && cont<25){
        printf("String[] : %s\n'",string);
        printf("*Morse[]: %s\n",morse[cont]);
        printf("Case %d:    %d\n",cont,i);
        cont++;
        printf("\n\n"); 
    }

    printf("Cont: %d\n",cont);
    printf("*Morse[]: %s\n",morse[cont]);
    printf("*Alfa[]: %s\n",alfa[cont]);
}

int main(int argc, char *argv[]) {
    int entry;
    char op=' ';

    while(op){ 
        printf("\nType 1 to convert to alphabet, morse must have end with 'X' (eg. .-X)\n");
        printf("\nType 0 to close\n");
        scanf("%d",&entry); 
        if(entry == 1) morseToAlfa();
        if(entry == 0) return 0;

    }

}

注意:如果您只是在没有扫描的情况下使用该功能,则它会成功运行。所以问题可能出在第二次扫描上。

最佳答案

当您调用 scanf 时,它所做的就是读入一个数字。号码后面的任何输入都将保留以供将来的调用读取输入。由于您必须按 Enter 键才能读取要读取的数字,因此当您读取字符串时,它仍然在缓冲区中。

一种可能的解决方案可能是这样的:

char input[100];
fgets(input,100,stdin);
sscanf(input,"%d",&entry);

这是利用 fgets 将读取整行输入的事实,然后使用 sscanf 提取数字。

值得记住的是,当您读取莫尔斯字符串时,您也会遇到这个问题,因为当它们输入“X”时您就会停止

关于比较输入中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52116262/

相关文章:

C++ 如何确定字母表中一个单词是否在另一个单词之前

java - 在不使用 Array.sort() 或 CompareTo() 的情况下按字母顺序排列字符串数组?

java - 重命名文件以按特定顺序按字母顺序排列它们?

java - 如何使用异常读取除字符串之外的其他内容?

c++ - 交换插入排序

c - 在c中的mac中链接错误gsoap

c - 我找不到为什么我的程序总是说太低

根据 R 中少数列名中的特定前缀对矩阵列重新排序

formatting - LaTeX 正式信函 : signature align left

c - 我是否只是证明了埃拉托色尼筛法的效率低于试验划分?