关于K&R《C程序设计语言》中int与char类型使用的疑问
关于K&R书中
int c声明的理解纠正 嘿,完全懂你的心情!虽然这类问题确实被问过很多次,但细节没摸透总觉得不踏实,咱们来把你对K&R示例的理解理清楚,把误区纠正过来:
- 你的原理解的模糊点修正:把变量
c声明为int而非char,核心原因可不是“char类型无法始终正确运行”这么笼统,而是和EOF的处理直接绑定的:- 首先要明确:
char类型分有符号和无符号两种(具体取决于编译器):有符号char的取值范围一般是-128到127,无符号则是0到255。 - 标准里的
EOF是一个非字符的负整数常量(通常定义为-1),如果用char来存getchar()的返回值,会出大问题:- 要是
char是有符号类型,当读取到ASCII值为255(也就是二进制0xFF)的字符时,它会被解析成-1,和EOF的值完全一样,程序根本分不清是读到了这个特殊字符还是到了文件末尾; - 要是
char是无符号类型,EOF的-1会被自动转成255,这时候程序永远没法判断“到底是读到了255这个字符,还是触发了文件结束”,直接陷入死循环。
- 要是
- 而
int类型的取值范围足够覆盖所有char的可能值(不管有符号还是无符号),同时能稳稳装下EOF这个特殊值,这样getchar()返回的每一个结果都能被正确存储和判断,不会出混淆的问题。
- 首先要明确:
内容的提问来源于stack exchange,提问作者Plar625
相关产品推荐
相关产品推荐

