C : while( scanf("%d",&num) != 1 ) 无限循环

C : while( scanf("%d",&num) != 1 ) infinite loop

希望你能帮我解决这个问题 我必须使用 scanf 来读取和验证输入... 我试过这段代码:

int num = 0;
while( scanf("%d",&num) != 1 || num < 3 || num > 9){
printf("Enter new num: ");
}

当我输入数字时效果很好,但是当我输入任何其他字符时它会进入无限循环而不是要求新的输入...

Enter new num: Enter new num: Enter new num: Enter new num:
Enter new num: Enter new num: Enter new num: Enter new num:
Enter new num: Enter new num: Enter new num: Enter new num:

有什么想法吗?

谢谢

您需要从输入缓冲区中删除无效数据。例如

int num = 0;
while( scanf("%d",&num) != 1 || num < 3 || num > 9){
    scanf( "%*[^\n]%*c" );
    printf("Enter new num: ");
}

这里有一个演示程序。

#include <stdio.h>

int main( void )
{
    int num = 0;

    printf("Enter new num: ");
    
    while( scanf("%d",&num) != 1 || num < 3 || num > 9){
        scanf( "%*[^\n]%*c" );
        printf("Enter new num: ");
    }
    
    printf("num = %d\n", num );
}

程序输出可能看起来像

Enter new num: 1
Enter new num: A
Enter new num: 10
Enter new num: 5
num = 5