• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 深入解读C语言中的符号常量EOF

深入解读C语言中的符号常量EOF

作者:xhz1234 字体:[增加 减小] 来源:互联网 时间:2017-05-28

xhz1234 通过本文主要向大家介绍了c语言eof,c语言中eof是什么意思,c语言eof什么意思,c语言eof怎么用,c语言中eof等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

EOF是指文件的结束符,是一个宏定义
    借助于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();
}
}
</div>

      其中,关系运算符!=表示“不等于”。
      字符在键盘、屏幕或其它的任何地方无论以什么形式表现,它在机器内部都是以位模式
存储的。char 类型专门用于存储这种字符型数据,当然任何整型(int)也可以用于存储字
符型数据。因为某些潜在的重要原因,我们在此使用int类型。
      这里需要解决如何区分文件中有效数据与输入结束符的问题。C语言采取的解决方法是:
在没有输入时,getchar 函数将返回一个特殊值,这个特殊值与任何实际字符都不同。这个
值称为EOF(end of file,文件结束)。我们在声明变量c 的时候,必须让它大到足以存
放getchar函数返回的任何值。这里之所以不把c声明成char类型,是因为它必须足够大,
除了能存储任何可能的字符外还要能存储文件结束符EOF。因此,我们将c声明成int类型。
EOF 定义在头文件<stdio.h>中,是个整型数,其具体数值是什么并不重要,只要它与
任何char类型的值都不相同即可。这里使用符号常量,可以确保程序不需要依赖于其对应的
任何特定的数值。
       对于经验比较丰富的C 语言程序员,可以把这个字符复制程序编写得更精炼一些。在C
语言中,类似于

c = getchar()
</div>

之类的赋值操作是一个表达式,并且具有一个值,即赋值后左边变量保存的值。也就是说,
赋值可以作为更大的表达式的一部分出现。如果将为c赋值的操作放在while循环语句的测
试部分中,上述字符复制程序便可以改写成下列形式:

#include <stdio.h>
/* copy input to output; 2nd version */
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
</div>

      在该程序中,while 循环语句首先读一个字符并将其赋值给c,然后测试该字符是否为文件
结束标志。如果该字符不是文件结束标志,则执行while语句体,并打印该字符。随后重复
执行while语句。当到达输入的结尾位置时,while循环语句终止执行,从而整个main函
数执行结束。
      以上这段程序将输入集中化,getchar函数在程序中只出现了一次,这样就缩短了程序,
整个程序看起来更紧凑。习惯这种风格后,读者就会发现按照这种方式编写的程序更易阅读。
我们经常会看到这种风格。(不过,如果我们过多地使用这种类型的复杂语句,编写的程序可
能会很难理解,应尽量避免这种情况。)
对while语句的条件部分来说,赋值表达式两边的圆括号不能省略。不等于运算符!=的
优先级比赋值运算符=的优先级要高,这样,在不使用圆括号的情况下关系测试!=将在赋值=
操作之前执行。因此语句

c = getchar() != EOF
</div>

等价于语句

c = (getchar() != EOF)
</div>

验证与打印EOF

1. 验证表达式 getchar() != EOF 的值是 0 还是 1。

#include <stdio.h>

main()
{
 int c;
  
  while(c = (getchar() != EOF))
   printf("%d\n", c);
  printf("%d - at EOF\n", c);
}

</div>

程序会读取字符,当有字符可读时,getchar() 不会返回文件结束符(EOF),所以 getchar() != EOF 的取值为真,变量 c 将被赋值为 1。当程序遇到文件结束符时,表达式取值为假,此时变量将被赋值为 0,程序将运行结束。

对于一个判断表达式,它的返回值会是一个布尔值。

2. 请编写一个打印 EOF 值的程序

#include <stdio.h>

main()
{
 printf("EOF is %d\n", EOF);
}

</div>

符号常量 EOF 是在头文件 stdio.h 中定义的,在这个程序中,printf() 语句中双引号外的 EOF 将被替换为头文件 stdio.h 中紧跟在 #define EOF 之后的文本。

在我们的系统中, EOF 被定义为 -1,但在其它系统中,EOF 可能被定义成其它的值。这正是使用 EOF 等标准符号常量能够增加程序可移植性的原因所在。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入解读C语言中的符号常量EOF
  • 基于C语言EOF与getchar()的使用详解

相关文章

  • 2017-05-28通过c++11改进我们的模式之改进命令模式
  • 2017-05-28详细解析命令行的getopt_long()函数
  • 2022-04-30大话C语言变量和数据类型
  • 2017-05-28C语言练习题:求1到10的阶乘之和简单实例
  • 2017-07-23《Objective-C高级编程》干货三部曲(一):引用计数篇
  • 2017-05-28二分法求多项式在-10 10间值的实现代码
  • 2017-05-28解析在WTL下使用双缓冲的实现方法
  • 2017-05-28详解C语言中的#define宏定义命令用法
  • 2017-05-28VC中使用ADO开发数据库应用程序简明教程
  • 2017-05-28贪心算法的C语言实现与运用详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++输出斐波那契数列示例分享
    • c++大数阶乘的实现方法
    • 枚举和宏的区别详细解析
    • 提高C++程序运行效率的10个简单方法
    • C++快速幂与大数取模算法示例
    • 有关C++头文件的包含顺序研究
    • 简单说说STL的内存管理
    • 深入c语言continue和break的区别详解
    • 头文件不宜定义变量的原因全面解析
    • C++算法之海量数据处理方法的总结分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有