而(scanf)是无限循环吗?
代码应该接受一行包含不同字符的用户输入,然后打印出一行只包含字母。例如,Cat8h08er64832&*^ine将是Catherine。然而,代码工作并输出“Catherine”,但程序不退出。。。我不确定循环是无限循环还是而(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
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中的许多陷阱中解脱出来。