我没有太多时间,而且很多关于stdin
这个阶段的问题只是提出了比它回答的问题多得多的问题。我希望测试通过多个scanf
.
如果我这样做:
char inputChar;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;
if(scanf("%c %d %lf",&inputChar,&inputInt,&inputDec) == 3) {
...
}
else if(scanf("%c %d %s",&inputChar,&inputInt,&inputChars) == 3) {
...
}
else if(scanf("%c %d",&inputChar,&inputInt) == 2) {
...
}
else if(scanf("%c",&inputChar) == 1) {
...
}
else {
...
}
然后键入一个字符并按 Enter,控制台会等到我输入另一个值,然后再评估是否匹配。
更新
这似乎工作正常,除了它希望您的输入在使用时完美。如果用户在按 Enter 之前键入aa
然后将其更改为,则它与第 4 次评估匹配。a 10
这是错误的,原因有两个:
- 因为如果正确捕获输入,它应该匹配第三个;和
- 因为如果没有,
aa
应该被过滤到第 5 次评估中。
修改后的代码:
char input[50] = { NULL };
char inputChar = NULL;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;
printf("Input String:\n>");
fgets(input,sizeof(input),stdin);
if(sscanf(input,"%c%d %lf",&inputChar,&inputInt,&inputDec) == 3) { }
else if(sscanf(input,"%c%d%s",&inputChar,&inputInt,&inputChars) == 3) { }
else if(sscanf(input,"%c%d",&inputChar,&inputInt) == 2) { }
else if(sscanf(input,"%c",&inputChar) == 1) { }
else { }
做这样的事情表明退格没有被过滤掉:
for(int i=0;i<50;i++) {
if(input[i] == (char) 10) { break; }
printf("\n%c %d",(char) input[i],(int) input[i]);
}
所以它似乎fgets
不在画面中。