C- number checking function gives infinite loop [closed]

主宰稳场 提交于 2019-12-26 14:04:15

问题


I'm trying to write a small function that will get a number. The function should be idiot-proof so it would give warnings if ie. someone entered a character instead.

I wrote a function like the one below, but if I enter a non-int the program gives me an infinite loop, constantly repeating the printf "Not a valid number" so I never get a chance to do the correct input.

The code:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    for (int ret = 0; ret < 1;)
    {
        int num;

        printf("\n Please input a number: ");
        ret = scanf ("%d", &num);
        if (ret < 1)
            printf ("\nNot a valid number!");
        else
            printf("\nYou input %d", num);
    }
    return 0;
}

How to fix it?


回答1:


Note the line below with the comment about eating the input buffer. Since your scanf didn't find what it is looking for in the input buffer, the wrong input just stays there and fails forever unless you do something to "eat" it.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hello world!\n");
    while ('A')
    {
        int x, y;
        printf("\n x: ");

        y = scanf ("%d", &x);
        printf("\nx = %d", x);
        if (y < 1)
        { // eat the input buffer so we can try again
            while ( getchar() != '\n' );
            printf ("\nWRONG!");
        }
    }

    return 0;
}



回答2:


Replace this line if (y = 0) with this if (y == 0).



来源:https://stackoverflow.com/questions/27731544/c-number-checking-function-gives-infinite-loop

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!