返回字符

时间:2012-04-14 00:04:19

标签: c getchar

这是来自Ritchie& S的 C编程语言的一些示例代码。 Kernighan的

int c;
        while((c=getchar())!=EOF) {
            putchar(c);
        }

请注意,putchar引用了 int 类型的变量。为什么可以使用此代码返回并显示字符和整数?

3 个答案:

答案 0 :(得分:4)

int通常由4个字节表示,而char实际上只是1个字节的数据。您可以轻松地在int返回的单getchar()中存储完整字符和更多字符。当一个int传递给putchar(int)时,它只是在显示它之前减掉额外的空间。这种技术对于传递EOF非常有用,char实际上不是int,而是传递文件末尾的{{1}}。

答案 1 :(得分:1)

char类型只是一个整数,在大多数情况下只是一个8位字节。 int类型是一个整数,通常更宽,因此可以保留char可以保留的所有可能值。为了使检查工作,它必须保持sizeof(int) > sizeof(char)。几乎总是这样。但如果我记得很清楚,据说标准并没有强制要求;这意味着唯一便携且安全的方法来检查已经读过的EOF是否是真正的文件结尾,这是用feof(FILE *)来检查的。 (例如,如果你的系统CHAR_BIT是16,sizeof(char)== 1的定义,但sizeof(int)也可以是1)。

答案 2 :(得分:1)

getchar()返回int,以便可靠地保存EOF值(定义为任何负整数,并且在大多数实现中它是-1)。 char类型可以是签名或未签名的,具体取决于实现。如果已签名,则可能能够保留EOF值,前提是EOFsigned char类型的范围内,如果是当EOF转换为unsigned char类型时,无符号可能与实际字符值无法区分。