C号检查功能给出无限循环[关闭]

问题描述 投票:-2回答:2

我正在尝试编写一个能获得数字的小函数。该功能应该是防止傻瓜的,所以它会发出警告,如果ie。有人输入了一个角色。

我写了一个类似下面的函数,但如果我输入一个非int,程序给我一个无限循环,不断重复printf“不是一个有效的数字”所以我永远不会有机会做正确的输入。

代码:

#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;
}

怎么解决?

c loops int infinite
2个回答
0
投票

请注意下面的行以及有关吃输入缓冲区的注释。由于你的scanf没有找到它在输入缓冲区中寻找的内容,错误的输入只会停留在那里并永远失败,除非你做一些事情来“吃掉”它。

#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
投票

用这个if (y = 0)替换这条线if (y == 0)

© www.soinside.com 2019 - 2024. All rights reserved.