比较输入中的字符串

时间:2018-08-31 13:14:20

标签: c alphabetical letter morse-code converters

我要用户选择一个选项。然后,当转换为字母时,命令strcmp始终为-1。我试图检查正在比较的内容,发现String正在获取“ \ 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;

    }

}

注意::如果只是不扫描就放置该功能,则该功能将成功运行。因此问题可能出在第二次扫描上。

1 个答案:

答案 0 :(得分:0)

呼叫scanf时,它所做的只是读取数字。号码之后的任何输入都留给以后的呼叫读取。由于必须按Enter键才能读取该数字,因此当您要读取字符串时,它仍在缓冲区中。

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

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

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

值得记住的是,当您读入莫尔斯弦时,也将遇到该问题,因为当它们输入“ X”时,您将停下来。