C语言怎么使用EOF

EOF的定义和运用看来给一些入门编程者带来了许多困惑我希望以下的解释能有助于你更好地理解它。 在我向你详细地讲述EOF是什么之前

我要首先告诉你它不是什么。
(2) 存在于文件结尾的一个数
(3) 存在于文件中数
 EOF是一个定义为负值的宏通常,一个函数在读取过程中出错或到了输入结尾时就会返回EOF
  由於类型提升规则 (variable promotion rules,下文中讲述),用int型变量来存取一些函数返回值十分必要,即使这些函数返回一个

 在定义上一个int型变量的范围比一个char型嘚大,因此一个负的int型数不能表示一个字符。但是当你比较 一个int型数和一个

char型数时,由于这两个变量在内存尺寸上的不同这个char型数將会被提升为一个int型数。被提升后的char型变量的值受符号位的影响 糟

糕的是,一个char型变量在缺省情况下既可以是有符号的也可以是无符号嘚这些取决于所用的编译器。
为了更好地理解让我们看几个int 型和char型的实例。假定int型变量为二个字节char型仅有一个字节。除了第一栏所有数值都用十六进

型变量为二个字节)。为了将这个结果存放在一个字符型变量中它必须被降级(demote),因此字符型的值变为0xff.接下来字符型c与整型

的EOF比较。提升规则开始起作用了c必须被提升为整型。但是在代码中,c的符号并未显式地声明所以我们不知道它是有符号的還是无符

在有些情况下程序可能会陷入无限循环中。

-返回值被降级为0xff,以便能存入无符号字符 型变量c中
-无符号字符型变量c被提升为整型值甴0xff变为0x00 0xff
-结果为FALSE(两个值不同),结果出乎意料
-fgetc()再次被调用但仍然返回EOF. 死循环开始

}

该楼层疑似违规已被系统折叠 

在程序运行时需要输入EOF来终止循环试了半天不知道怎么输入。


}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信