[英]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.