2016-09-06 69 views
1

到目前为止,我已经发现,我们使用getchar()作为int,因为在EOF这个函数返回-1。我想知道char举行-1?我认为是可以的,因为它也可以范围从-128到127为什么C中的getchar()函数是一个整数?

我通过谷歌的顶级目录搜索,但得到的答复没有满足我。

+2

当有人竟类型,它们的代码字符是'会发生什么-1' –

+0

只是打印-1,我想,太..我认为,当getchar函数()返回-1,这是不同的,那么仅仅通过键入-1键盘! @ M.M –

+2

我说,其代码为'-1',而不是字符'-'性格和'1' –

回答

6

首先结束文件的最神奇的数字,只是清理的东西了,EOF是专门不需要-1。 ISO C标准要求它具有负值。

还要注意该类型char可符号或无符号;这是实现定义的。

函数fgetc,getcgetchar可用于处理二进制流,不仅可以处理文本流。字节的值从0到UCHAR_MAX。这个范围的自然类型是unsigned chargetc的返回值不能为unsigned char,因为EOF不可表示。它也不能是signed char,因为signed char无法保存0到UCHAR_MAX之间的值。因此,选择更宽的类型:int。上主流平台,intchar更宽:它有一个尺寸至少为2因此,这是能够表示可用于EOF一些负值,并在范围为0〜UCHAR_MAX的所有字节值。

在一些C实现(对于系统,如一些DSP芯片),这是不正确的:int是一个字节宽。这代表了挑战。在这种C实现中,由getc返回的有效字节值范围必须是负数,其中一个值与EOF冲突。精心编写的代码可以告诉大家,这样的话:等于EOF的值返回,然而feofferror功能报告虚假:流未发生错误,并且没有发生-的文件末尾。因此,看起来像EOF的值实际上是一个有效的字节。

+1

感谢EOF <0的澄清,不一定EOF = -1。 –

4

getchar()和家族返回一个整数,以便EOF -1(char)-1(unsigned char)255区分开来。

+0

我现在有点困惑,我试图搜索-1(char)但我找不到它?我只是看到桌上的积极数字!@ J Earls –

+0

如果用“table”表示美国ASCII图表或其他东西,那么这些都是正数。但是,C'char'类型是一个8位** signed **整数类型。它代表从0到127和从-128到-1而不是从0到127和128到255的数字。 –

0

个字符,使用ASCII编码时,使用一个字节,它是8位无符号整数存储。因此,字符可以取数值0-255。

的getchar返回一个符号整数允许-1,这是(EOF)

相关问题