在C中将值存储在int中与从getchar函数返回的char中的区别 [英] Difference between storing the value in int and char returned from getchar function in C
本文介绍了在C中将值存储在int中与从getchar函数返回的char中的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在阅读Dennis Ritchie的书时,我发现将getchar()
函数在C中返回的值存储在整型变量中比存储在字符型变量中更好。声明的原因是字符类型变量不能存储EOF
的值。在实际实现时,将返回存储在char类型变量中并不困难。而getchar()函数最初返回的是字符还是字符的ascii值?
推荐答案
EOF
的值始终定义为-1。
这很好用,因为所有ASCII
代码都是正的,所以它不可能与任何真实角色的表示形式冲突。
不幸的是,C
有一个非常奇怪的功能,可能会造成麻烦。没有定义字符变量的可能值的范围必须是什么。在某些系统上,它是-128到+127,这很好;但在其他系统上,它是0到+255,对于正常的ASCII值来说很好,但对于EOF-1就不那么热了。
getchar()
的返回值的变量必须是int
。EOF
是getchar()
的out of band
返回值:它不同于getchar()
可以返回的所有可能的字符值。(在现代系统上,它不反映文件中存储的任何实际文件结束字符;它是没有更多可用字符的信号。)getchar()
的返回值必须存储在大于char的变量中,以便它可以保存所有可能的char值和EOF。
如果将getchar()
的返回值分配给字符,则可能出现两种失败模式。
- 如果type
char
为signed
,并且EOF
定义为-1
,则带十进制值255
(<2-4]>中的‘377’或‘xff’)的字符将被符号扩展,并与EOF
比较等于EOF
,提前终止输入。t - 如果类型
char
为unsigned
,则实际的EOF
值将被截断(丢弃其高阶位,可能会导致255
或0xff
),不会被识别为EOF
,从而实际上是无限输入。
引用:
K&;R1秒1.5第14页 K&;R2秒1.5.1第16页ISO SEC
6.1.2.5,秒7.9.1,秒7.9.7.5
H&S SEC。5.1.3第116页,秒15.1,秒15.6
CT&P SEC。5.1第70页每秒11页157页
通常,最好将getchar()
的结果存储在int中,以确保正确处理EOF
。
这篇关于在C中将值存储在int中与从getchar函数返回的char中的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文