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

 我来答
qingyang8513
2014-03-03 · 超过20用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:50.8万
展开全部
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也就是理所当然的了,希望你已经完全理解了。
monsters88
2014-03-04 · TA获得超过129个赞
知道答主
回答量:38
采纳率:66%
帮助的人:20.9万
展开全部
这道题,因为设置 char 型字符c不是字符数组,所以第一次接收字符的时候,

① c=A
② c=B
③c=C
④ c=D
.................
依次类推
每执行一次for循环语句,c都会被重新赋值,所以最后c的值为'\n';
所以本体选择C,谢谢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
钚祗钚觖
2014-03-03 · 超过32用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:78.5万
展开全部
qingyang8513 讲的不错
还有一点,这个字符输入的语句 c=(getchar() != '\n') 的结果 c 一直是 1,直到遇到'\n' ,c变成0,而 printf("%c",c)按照 ascii 输出,就是一个笑脸。所以是非字母数字字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式