我正在测试scanf函数,以根据用户输入检查它是否读入了一个值(整数)。在我的netbeans IDE中,程序编译但输入的值为x,如' 6'没有任何反应,直到再次输入,然后程序继续正确反应,打印第一个if语句。对此问题的任何帮助将不胜感激:
这里只是一个片段:
int main(void)
{
int x;
printf("please enter a value for x");
scanf("%d",&x);
if(scanf("%d",&x) == 1) // checks to see if it contains one value
printf("x value has one value");
else
printf("X value is not an integer or has more than one value");
}
答案 0 :(得分:1)
这是因为您的代码中有两个scanf
(一个位于if
之前,另一个位于if(...)
)。当您输入6
时,第一个scanf
会将其取消,然后scanf
内的第二个if(...)
会等待下一个输入,让您输入两次。
删除第一个scanf
,您的程序将正常运行!
答案 1 :(得分:1)
嗯......第一个scanf()停止并等待您输入'6'然后按Enter键。然后你已经让它执行另一个scanf(),它将重复这种行为。
第一次完全放弃,看看它是否适合你。
答案 2 :(得分:1)
你正在阅读两个值。每次拨打scanf
时,程序都会等到您输入内容为止。因为你两次调用scanf
,(一次在if语句之前,一次在if语句中),你等待读入两个值。使用这样的东西:
int main(void)
{
int x;
printf("please enter a value for x");
int valueCount = scanf("%d", &x);
if (valueCount == 1) // checks to see if it contains one value
printf("x value has one value");
else
printf("X value is not an integer or has more than one value");
}
答案 3 :(得分:0)
scanf
会返回匹配的项目数或EOF。但它每次调用时都需要输入。所以你需要捕获第一个语句的返回值,而不是再次调用它。
即,将scanf(...)
替换为int retval = scanf(...)
。
然后if(...)
语句应为if(retval == 1)...
。