我要求用户选择一个选项。然后,当转换为字母时,命令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/