C语言问题,为什么输出全是笑脸

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:26:41
#include<stdio.h>
main()
{ char a[80];
int n=0;
while(a[n]=getchar()!='\n')
n++;
a[n]='\0';
n=n-1;
for(;n>=0;--n)
putchar(a[n]);
}

运算符的优先级没有弄清楚

逻辑运算符的优先级比赋值运算符的优先级要高!

所以你的while是先判断getchar!='\n' 这个只要成立就为1

所以赋值的时候总是将1赋值给你的数组里了

而输出的时候ASCII为1的字符就是你看到的那个笑脸!

改:

#include<stdio.h>
main()
{ char a[80];
int n=0;
while(a[n]=getchar()!='\n') //该成while((a[n]=getchar())!='\n')
n++;
a[n]='\0';
n=n-1;
for(;n>=0;--n)
putchar(a[n]);
}

while(a[n]=getchar()!='\n')
中的a[n]=getchar()!='\n'相当于
a[n]=(getchar()!='\n')
所以a[n]=1;
ascii码为1的是笑脸
所以输出全是笑脸

把“while(a[n]=getchar()!='\n') ”一句中的 “a[n]=getchar()”用括号括起来,改为:while((a[n]=getchar())!='\n')

将这一句改成这样就可以了while( (a[n]=getchar())!='\n')

运算符优先级的问题 while(a[n]=getchar()!='\n') 语句中!=优先运算 其值为1 char a[n]=1 为笑脸 如果是int 则是1了

看看是不是数组的问题。