while(scanf)是无限循环的吗?

时间:2015-11-17 00:44:01

标签: c loops while-loop scanf infinite

代码应该接受包含不同字符的一行用户输入,然后打印出只包含字母的一行。例如,Cat8h08er64832& * ^ ine将是Catherine。然而,代码工作和输出"凯瑟琳"但程序没有退出... see picture here我不确定循环是否只是无限循环或...

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

1 个答案:

答案 0 :(得分:1)

您的问题是,您通过检查返回值scanf来检查0是否已完成。当没有更多输入时,scanf返回EOF(通常为-1)。因此,如果你得到一些输入(返回1)然后没有更多输入(返回-1),你的循环就不会退出。

更改scanf条件以检查<> EOF

This answer也很好地解释了它。