用于检查整数读数的Scanf不起作用

时间:2014-11-08 04:23:41

标签: c input int scanf

我正在测试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");

}

4 个答案:

答案 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)...