C语言问题,第四题为什么选C,讲稍微具体一点

如题所述

getchar的原型是:int getchar(void);,当函数读取出错或者读完文件后,会返回 EOF。EOF 是一个宏,标准规定它的值必须是一个 int 型的负数常量。通常编译器都会把 EOF 定义为 -1。

问题就出在这里,使用 char 型变量接收 getchar 等函数的返回值会导致对 EOF 的辨认出错,或者错把好的数据误认为是 EOF,或者把 EOF 误认为是好的数据。

由于c是char类型,取值范围是[-128,127],如果宏EOF的值在char的取值范围之外,则程序就会出错。

为什么c标准库函数的设计者要将getchar声明为令人迷糊的int类型呢?答案很简单:在正常情况下,getchar的确返回单个字符。但如果getchar碰到文件结束标志或发生读错误,它必须返回一个EOF。为了区别于正常的字符,只好将EOF定义为负数(通常为-1)。因此函数getchar就设置成了int类型。

getchar()函数潜在的危险难以察觉,许多初学者都习惯用 char 型变量接收 getchar、getc,fgetc 等函数的返回值,其实这么做是不对的。

因此,答案是C也就是理所当然的了,希望你已经完全理解了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-04
这道题,因为设置 char 型字符c不是字符数组,所以第一次接收字符的时候,

① c=A
② c=B
③c=C
④ c=D
.................
依次类推
每执行一次for循环语句,c都会被重新赋值,所以最后c的值为'\n';
所以本体选择C,谢谢本回答被提问者采纳
第2个回答  2014-03-03
qingyang8513 讲的不错
还有一点,这个字符输入的语句 c=(getchar() != '\n') 的结果 c 一直是 1,直到遇到'\n' ,c变成0,而 printf("%c",c)按照 ascii 输出,就是一个笑脸。所以是非字母数字字符。