【发布时间】:2018-03-05 11:13:08
【问题描述】:
我需要接收来自用户输入的两种形式,charintfloat 或charint,但我不知道会给出哪一种。我试过这个:
int main(){
char letter;
int num;
float value;
while(getchar()!=EOF){
scanf(" %c %d %f", &letter, &num, &value);
printf("%c\n", letter);
printf("%d\n", num);
printf("%f\n", value);
}
return 0;
}
问题是当我给出这样的输入时:
? 12345
g 12345 45.6
? 12345
Output given: Expected Output:
1 ?
2345 12345
0.000000 0.000000
1 g
2345 12345
45.599998 45.599998
? ?
12345 12345
45.599998 45.599998
为什么部分数字会代替char 而char 会被忽略?有没有办法解决这个问题?
【问题讨论】:
-
我认为发生的事情是您不小心使用
getchar()!=EOF读取了第一个字符。 -
有没有办法避免这种情况?我需要使用 ctrl+d 逗号停止程序,这就是它存在的原因。
-
你的主循环应该沿着
int numvals; while ((numvals = scanf("…", …)) >= 2) { … }的行。只有当您设法转换 2 或 3 个值时,循环才会继续。您应该始终检查scanf()等函数的返回值;忽略它是一个错误。 -
嗯,是的 - 你从其他人那里得到了很好的答案。
-
这个错误实际上是 getchar()!=EOF,使用 Jonathan Leffer 的建议,它得到了修复,如果你们中的任何人想给出它作为答案,我会将其标记为正确,感谢两者。