'当没有成功的任务时'我知道scanf返回0表示它,但这是唯一的吗?这是我的代码:
#include<stdio.h>
int main(void) {
int val,x;
x=scanf("%d",&val);
if(x==1)
printf("success!");
else{
printf("try again\n");
scanf("%d",&val);
}
return 0;
}
如果我输入一个数字,它工作正常,但如果我输入一个字符scanf不再工作,这就是我得到的:
k
try again
process returned 0 (0x0) execution time :2.578 s
press any key to continue.
_
意味着它不允许我输入新值,为什么会这样?代码中有什么问题吗?如果是的话我该如何解决?我应该停止使用scanf吗?
答案 0 :(得分:7)
当scanf
不起作用时,无效数据仍保留在流中。在输入更多数据之前,您必须先从流中读取并丢弃数据。
#include<stdio.h>
int main(void) {
int val,x;
x=scanf("%d",&val);
if(x==1)
printf("success!");
else{
// Discard everything upto and including the newline.
while ( (x = getchar()) != EOF && x != '\n' );
printf("try again\n");
scanf("%d",&val);
}
return 0;
}
答案 1 :(得分:3)