区别在于c=getchar()!=EOF是先将从设备获得的字符与EOF进行比较,然后将比较的结果赋值给c变量。而(c=getchar())!=EOF是先将获得的字符赋值给变量c,然后再与EOF比较。
出现这种区别的原因是不等于!=的优先级高于赋值运算符=的优先级。
改之前,是先执行getchar()!=EOF,改之后是先执行c=getchar
改之前不论你输入什么都不会是EOF,所以必然1,改之后先赋值给c然后检测是否是EOF,输出c,而如果你输入字符,那么因为要求输出整型,所以会给你改成ASCLL的值给你,看起来就是奇怪数字,其实是该字符在ASCLL表中所代表的值
不知到楼主到底时啥意思
首先先解释二者的区别
while(c=getchar()!=EOF)
这儿先执行的时gerchar != EOF操作,所以C接收的只能是1
while((c=getchar())!=EOF)
这个先执行的时C = getchar() 然后在执行C != EOF操作,
又因为,你的输出时%d,即输出整数
而getchar 接收的都是字符,所以根据ASCLL表会发生转换,所以时奇怪的数字