簡體   English   中英

while(scanf) 是無限循環?

[英]while(scanf) is infinite looping?

該代碼應該接受一行包含不同字符的用戶輸入,然后打印出一行僅包含字母的行。 例如,Cat8h08er64832&*^ine 將是 Catherine。 但是,代碼可以工作並輸出“Catherine”,但是程序沒有退出……請看這里的圖片我不確定循環是無限循環還是……

int main(void){

  int i=0, j=0;
  char userString[1000];
  char alphabet[1000];

  printf("Please enter a string: ");

  while(scanf("%c", &userString[i])){
    if((userString[i]>='A' && userString[i]<='Z')||(userString[i]>='a'&&userString[i]<='z')){
        alphabet[j]=userString[i];
        printf("%c", alphabet[j]);
        j++;
     }
     i++;
   }
   printf("\n");
   return 0;
}

您的問題是您正在通過檢查返回值0來檢查scanf是否已完成。 當沒有更多輸入時, scanf返回EOF (通常為 -1)。 所以如果你得到一些輸入(返回 1)然后沒有更多的輸入(返回 -1),你的循環將永遠不會退出。

更改scanf條件以檢查<> EOF

這個答案也很好地解釋了它。

暫無
暫無

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

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