Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
而(scanf)是无限循环吗?_C_Loops_While Loop_Scanf_Infinite - Fatal编程技术网

而(scanf)是无限循环吗?

而(scanf)是无限循环吗?,c,loops,while-loop,scanf,infinite,C,Loops,While Loop,Scanf,Infinite,代码应该接受一行包含不同字符的用户输入,然后打印出一行只包含字母。例如,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

代码应该接受一行包含不同字符的用户输入,然后打印出一行只包含字母。例如,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;
}
int main(无效){
int i=0,j=0;
char userString[1000];
字符字母[1000];
printf(“请输入字符串:”);
while(scanf(“%c”,&userString[i])){

如果((userString[i]>='A'&&userString[i]='A'&&userString[i]你的问题是,当没有更多输入时,你通过检查返回值
0
scanf
返回
EOF
(通常是-1)来检查
scanf
是否完成。因此,如果你得到一些输入(返回1),那么就没有更多输入(返回-1),您的循环将永远不会退出

scanf
条件更改为检查
EOF


也很好地解释了它。

循环没有退出条件。退出条件应该是什么?
scanf
在到达输入端时返回
EOF
(键入
Ctl-d
)。您没有检查它。
%c
运算符永远不能返回0个转换,因为任何字符都与之匹配。我认为while(scanf(“%c”)、&userString[I])将循环直到用户输入结束(enter键)?不是吗?@Barmar ohh我认为这很有意义。如果您想读取单行输入,请使用
fgets
读入数组。然后循环数组中的字符。而(scanf(“%c”,&userString[I])!=EOF)也不起作用。这是因为%c接受enter键(\n)作为一个有效的输入,并且不知道我希望它在按下enter键后终止?听起来很可能。scanf很难使用人工输入。您可能需要检查多个终止值和错误条件。我最终使用了fgets并在那里循环。无论如何,感谢您的帮助。好东西。fgets保护了y您可以从scanf中的许多陷阱中解脱出来。