c - while(scanf) 是无限循环吗?

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

最佳答案

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

更改 scanf检查条件<> EOF .

This answer也很好地解释了这一点。

关于c - while(scanf) 是无限循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33747272/

相关文章:

c# - 如何执行给定次数的while循环?

c++ - 我是否需要 64 位处理器才能使用 64 位数据类型

python - 遍历多个文件并计算多个字符串

c++ - C++ 上的用户输入结束循环

java - 为什么我的 java 程序一直在运行而没有完成 main 方法?

python:在 while 循环中区分 b/w multiple-ifs 和 if-elif-else

c - 在不传递参数数量或最终参数的情况下在 C89 中使用可变参数函数?

c - free() 函数如何收集有关号码的信息。要释放的字节数

c - 是否可以使用 switch 来更改 float 函数中 char 类型函数的值?

MySQL - 在 SQL 过程中使用 foreach 排序