2 throne jk throne_JK 于 2014.11.23 17:24 提问

关于C语言字符的问题--新手求助

#include
void main()
{
int i;
char a[80];
i=0;
while((a[i]=getchar())!='\n')
i++;
a[i]='\0';
for(i=0;a[i]!='\0';i++)
{ if('A'<=a[i]&&a[i]<='Z')
a[i]=(155-a[i]);
putchar(a[i]);
}
printf("\n");
}

for语句中为什么不可以将循环终止条件换为'\n' 即以回车符为终止条件程序输出结果后会无限进行下去

额 是不是那个第一句里的回车符没有输入 到 a[i] 中

5个回答

tractor_man
tractor_man   2014.11.23 18:11

跳出while((a[i]=getchar())!='\n')这句的时候a[i] = '\n';
然后执行a[i] = '\0';这句就把之前的a[i]中的'\n'覆盖了。

throne_JK
throne_JK   2014.11.23 17:32

额 是不是那个第一句里的回车符没有输入 到 a[i] 中

su_xiaoyan
su_xiaoyan while((a[i]=getchar()) != '\n')
接近 3 年之前 回复
llp1992
llp1992   2014.11.23 20:12

while((a[i]=getchar())!='\n')这一句执行完要跳出的时候,也就是你按下回车的时候,此时a[i]已经在whilede 括号内赋值为'\n',但是while条件不满足,所以i++这句没有执行,执行了后面的a[i]='\0'; 这句把a[i]的值从'\n'覆盖为'\0',所以char 数组中并没有'\n'这个字符,所以for循环会一直执行

eagleyan
eagleyan   Rxr 2014.12.01 05:28

tractor_man是对的,如果你需要那个\n保留下来,简单的修改就可以

while((a[i]=getchar())!='\n')
i++;
修改成
while((a[i++]=getchar())!='\n');

ajtdnta
ajtdnta   2014.12.10 14:26

因为当接收到'\n'时循环条件 while((a[i]=getchar())!='\n') 不成立,从而终止了循环。正确的做法是。
while(1)
{
a[i] = getchar();
if(a[i] == '\n'){
break;
}

}

这样你的循环终止条件就可以用'\n'作为终止条件了。
另外,你的问题描述不够清楚,要加强一下描述问题的功夫。
还有,你的程序存在很多问题,至少我可以说出 5个。

Csdn user default icon
上传中...
上传图片
插入图片