【发布时间】:2015-11-17 00:44:00
【问题描述】:
该代码应该接受一行包含不同字符的用户输入,然后打印出仅包含字母的一行。例如, 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在输入结束时返回EOF(当您键入Ctl-d时)。你不是在检查那个。%c运算符永远不会返回 0 次转换,因为任何字符都匹配它。 -
我认为 while(scanf("%c", &userString[i])) 会循环直到用户输入结束(回车键)?不是吗?
-
@Barmar 哦,我觉得这很有意义。
-
如果要读取单行输入,请使用
fgets读取数组。然后循环遍历数组的字符。
标签: c loops while-loop scanf infinite