簡體   English   中英

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

程序 output 可能看起來像

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM