#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] 中
额 是不是那个第一句里的回车符没有输入 到 a[i] 中
跳出while((a[i]=getchar())!='\n')这句的时候a[i] = '\n';
然后执行a[i] = '\0';这句就把之前的a[i]中的'\n'覆盖了。
while((a[i]=getchar())!='\n')这一句执行完要跳出的时候,也就是你按下回车的时候,此时a[i]已经在whilede 括号内赋值为'\n',但是while条件不满足,所以i++这句没有执行,执行了后面的a[i]='\0'; 这句把a[i]的值从'\n'覆盖为'\0',所以char 数组中并没有'\n'这个字符,所以for循环会一直执行
tractor_man是对的,如果你需要那个\n保留下来,简单的修改就可以
while((a[i]=getchar())!='\n')
i++;
修改成
while((a[i++]=getchar())!='\n');
因为当接收到'\n'时循环条件 while((a[i]=getchar())!='\n') 不成立,从而终止了循环。正确的做法是。
while(1)
{
a[i] = getchar();
if(a[i] == '\n'){
break;
}
}
这样你的循环终止条件就可以用'\n'作为终止条件了。
另外,你的问题描述不够清楚,要加强一下描述问题的功夫。
还有,你的程序存在很多问题,至少我可以说出 5个。