while(scanf) 是无限循环吗?
while(scanf) is infinite looping?
该代码应该接受一行包含不同字符的用户输入,然后打印出仅包含字母的一行。例如,Cat8h08er64832&*^ine 将是 Catherine。然而,代码工作并输出 "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;
}
您的问题是您通过检查 return 值 0
来检查 scanf
是否完成。 scanf
returns EOF
(通常为-1)当没有更多输入时。所以如果你得到一些输入(return 1)然后没有更多的输入(return -1),你的循环将永远不会退出。
更改 scanf
条件以检查 <> EOF
。
This answer也解释得很好
该代码应该接受一行包含不同字符的用户输入,然后打印出仅包含字母的一行。例如,Cat8h08er64832&*^ine 将是 Catherine。然而,代码工作并输出 "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;
}
您的问题是您通过检查 return 值 0
来检查 scanf
是否完成。 scanf
returns EOF
(通常为-1)当没有更多输入时。所以如果你得到一些输入(return 1)然后没有更多的输入(return -1),你的循环将永远不会退出。
更改 scanf
条件以检查 <> EOF
。
This answer也解释得很好