繁体   English   中英

Scanf检查整数读取不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM