簡體   English   中英

輸入退出條件后陷入無限循環。

[英]Stuck in a infinite loop after inputing the exit condition.

我正在嘗試使其循環運行,直到給出非數字輸入為止。 問題是當我輸入一個字母退出while循環時,它將進入無限循環。 它還進入第一個if語句,並繼續循環遍歷該語句。 如果有人對如何解決此問題有任何想法,那就太好了。

int counter;
int input[100]
int num = 1
while (input[num] == 0)
{
    printf("score #%d:", counter);
    scanf("%d",&input[num]);

    if (input[num] <= 0){
        printf("you cannot use negative numbers\n");
        continue;
    }
    if (input[num] >= 100){
        printf("you cannot use numbers greater than 100\n");
        continue;
    }
    num++;
    counter++;

}

問題是,當嘗試以%d格式讀取時,當scanf提供有非數字輸入時,該非數字數據不會從緩沖區中刪除。 當循環再次到達scanf時,它將獲取相同的數據,並繼續在無限循環中失敗。

要解決此問題,請在scanf讀取的項目數不正確時刪除非數字輸入:

int readCount = scanf("%d",&input[num]);
if (readCount != 1) {
    scanf("%*s");
    printf("Please enter a valid number.\n");
    continue;
}

請注意,循環的結束條件是不正確的,因為num總是在已讀取的最后一個元素之后。 您可以這樣解決:

while (num < 100)
{
    ... // Read and error checks go here
    if (input[num] == 0) {
        break;
    }
    num++;
    counter++;
}

首先,由於數組索引從0開始而不是1,因此num應該為0。

然后,您在while的條件下input[num]==0 您使用未初始化的變量進行測試,因為input尚未初始化。 counter

您錯過了;您的代碼將無法編譯; 在第2行和第3行的末尾。

最后,用以下代碼替換您的scanf

if(scanf("%d",&input[num])==0)
{printf("non-numeric character entered .Exiting loop...\n");
scanf("%*s");// asterick tells scanf to discard scanned string(clear the entered char)
break;
}

最后,修改后的代碼:

int counter=1; // initialize variable
int input[100]; //semicolon here
int num = 0; //num must be 0
while (1) //infinite loop
{
    printf("score #%d:", counter);

    if(scanf("%d",&input[num])==0) //if no value is scanned
{printf("non-numeric character entered .Exiting loop...\n");
scanf("%*s");// asterick tells scanf to discard scanned string(clear the entered char)
break;
}

    if (input[num] <= 0 )
        printf("you cannot use negative numbers\n");

    else if (input[num] >= 100)
        printf("you cannot use numbers greater than 100\n");
   else{
    num++;
    counter++;}

}

暫無
暫無

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

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