我要用户选择一个选项。然后,当转换为字母时,命令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;
}
}
注意::如果只是不扫描就放置该功能,则该功能将成功运行。因此问题可能出在第二次扫描上。
答案 0 :(得分:0)
呼叫scanf
时,它所做的只是读取数字。号码之后的任何输入都留给以后的呼叫读取。由于必须按Enter键才能读取该数字,因此当您要读取字符串时,它仍在缓冲区中。
一个可能的解决方案可能是这样:
char input[100];
fgets(input,100,stdin);
sscanf(input,"%d",&entry);
这是为了利用fgets
将在整个输入行中进行读取,然后使用sscanf
提取数字的事实。
值得记住的是,当您读入莫尔斯弦时,也将遇到该问题,因为当它们输入“ X”时,您将停下来。