我的测试代码如下:
#include <stdio.h>
int main(){
char c;
while ((c=getchar())!=EOF){
if(c>='A'&& c<='Z'){
c=c-'A'+'a';
putchar(c);
}
//else break;
}
return 0;
}
没有else break命令,while循环永远存在,但是当我添加&#34; else&#34;命令行,循环只执行一次,我键入&#34; A&#34;它显示了&#34; a&#34;在显示器上然后停止。但我认为它应该是这样的:如果输入A~Z,那么如果输入字符不在范围内,则产生小写字母,例如。一些东西,它会打破循环,执行会停止。我在哪里弄错了?我试过在&#34; else&#34;之后添加大括号。周围&#34;休息&#34;,但结果仍然存在。
答案 0 :(得分:1)
getchar
函数将从stdin中读取每个字符,甚至是&#34; Enter / Return&#34;中的换行符。键。
当您启用else
部分时,您的代码也会对导致中断的'\n'
作出反应。
您可以尝试更改
else break;
通过
else if (c != '\n') break;
代码。
答案 1 :(得分:0)
char c;
while ((c=getchar())!=EOF){
需要
int c;
while ((c=getchar())!=EOF){
请参阅http://www.tutorialspoint.com/c_standard_library/c_function_getchar.htm
此外,你的代码并没有说'如果他们输入的字符串不是A-Z就停止',它会说'要求他们输入直到他们输入EOF' - 当他们输入A-Z'时回复给他们。 EOF类型为UNIX
上的ctrl-D答案 2 :(得分:0)
如果您只输入A
而没有其他内容,则您的计划会看到A
和换行符\n
。换行符与模式A...Z
不匹配,因此执行break
语句。
您可以通过打印字符代码来查看:
while ((c=getchar())!=EOF){
printf("Character code: %d\n", c);
...
}
您可以输入ABACABB
之类的内容来查看您想要的行为。