[英]Scanf to check reading of integer doesn't work
我正在测试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");
}
那是因为您的代码中有两个scanf
(一个在if
之前,另一个在if(...)
)。 输入6
,第一个scanf
占用它,然后if(...)
内部的第二个scanf
等待下一个输入,使您输入两次。
删除第一个scanf
,您的程序将正常运行!
好吧...第一个scanf()停止,等待您键入“ 6”,然后按Enter。 然后,您需要执行另一个scanf()来重复该行为。
只需将其完全放下,看看它是否对您有用。
您正在读取两个值。 每次调用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");
}
scanf
返回匹配的项目数或EOF。 但它每次调用时也要输入。 因此,您需要捕获第一条语句的返回值,而不是再次调用它。
也就是说,取代scanf(...)
与int retval = scanf(...)
然后, if(...)
语句应为if(retval == 1)...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.