关于第1章:Kernighan和Ritchie的教程介绍中的这段经文:C编程语言(我已经加粗了我需要澄清的具体部分,并在下面详细阐述):
给定getchar和putchar,您可以编写大量有用的代码,而无需了解有关输入和输出的更多信息.最简单的例子是一个程序,一次将其输入复制到输出一个字符:读取字符while(字符不是文件结束指示符)输出字符只读取读取字符将其转换为C给出:
#include <stdio.h>
/* copy input to output; 1st version */ main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
关系运算符!=表示"不等于".键盘或屏幕上似乎是一个字符,当然,就像其他一切一样,内部存储就像一个位模式.char类型专门用于存储此类字符数据,但可以使用任何整数类型.我们使用int是一个微妙但重要的原因.
问题是区分输入结束和有效数据.解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆.对于"文件结束",该值称为EOF.我们必须声明c是一个足够大的类型,以保存getchar返回的任何值.我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF.因此我们使用int.
我的理解是Char是一种Int,但它只是更小(与Int16,Int32,Int64在其他语言中相同,但可以表示数字的大小).
我知道每个字符都可以用Char类型的整数表示,那么为什么EOF值不能表示为Char?是因为Char类型中的每个整数都已被考虑,甚至还有一个数字对于数据类型而言太大了?
任何解释或更正我的知识将不胜感激.