C语言中EOF的应用
2008年06月26日 星期四 13:58

1.5.1. 文件复制
借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出
数量惊人的有用的代码。最简单的例子就是把输入一次一个字符地复制到输出,其基本思想
如下:
读一个字符
while (该字符不是文件结束指示符)
输出刚读入的字符
读下一个字符
将上述基本思想转换为C语言程序为:
#include <stdio.h>

main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
其中,关系运算符!=表示“不等于”。
字符在键盘、屏幕或其它的任何地方无论以什么形式表现,它在机器内部都是以位模式
存储的。char 类型专门用于存储这种字符型数据,当然任何整型(int)也可以用于存储字
符型数据。因为某些潜在的重要原因,我们在此使用int类型。
这里需要解决如何区分文件中有效数据与输入结束符的问题。C语言采取的解决方法是:
在没有输入时,getchar 函数将返回一个特殊值,这个特殊值与任何实际字符都不同。这个
值称为EOF(end of file,文件结束)。

我们在声明变量c 的时候,必须让它大到足以存放getchar函数返回的任何值。这里之所以不把c声明成char类型,是因为它必须足够大,除了能存储任何可能的字符外还要能存储文件结束符EOF。因此,我们将c声明成int类型。
EOF 定义在头文件<stdio.h>中,是个整型数,其具体数值是什么并不重要,只要它与任何char类型的值都不相同即可。这里使用符号常量,可以确保程序不需要依赖于其对应的任何特定的数值。
对于经验比较丰富的C 语言程序员,可以把这个字符复制程序编写得更精炼一些。在C语言中,类似于
c = getchar()
之类的赋值操作是一个表达式,并且具有一个值,即赋值后左边变量保存的值。也就是说,
赋值可以作为更大的表达式的一部分出现。如果将为c赋值的操作放在while循环语句的测
试部分中,上述字符复制程序便可以改写成下列形式:
#include <stdio.h>

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

C语言中EOF的应用相关推荐

  1. C语言中EOF的用法及不同环境下的使用

    C语言中EOF的含义是end of file,即文件结束符,但是不仅仅是在文件中使用,在输入的时候也可以使用.EOF的值是-1.在文本文件中才能使用EOF作为结束符.在使用scanf输入的时候,如果输 ...

  2. c语言eof不起作用,c语言中EOF的用法

    c语言中EOF的用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中EOF的用法 1.EOF是end of fi ...

  3. 关于c语言中EOF用法的理解

    作者:Senlern 转载请注明,原文链接:http://blog.csdn.net/zhang429350061/article/details/8760636 首先看一下EOF的官方解释: 计算机 ...

  4. c语言中eof的作用,深入解读C语言中的符号常量EOF

    EOF是指文件的结束符,是一个宏定义 借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出 数量惊人的有用的代码.最简单的例子就是把输入一次一个字符地复制到输出, ...

  5. c语言中eof的作用,C语言中,怎么用EOF结束输入?

    大话西游666 EOF 是个宏,其意思是:End Of File,文件尾标志. 从数值上来看,就是整数-1在C语言的头文件中对其进行了宏定义:1libio.h:    # define EOF (-1 ...

  6. C语言中EOF是什么?

    我学习C语言的时候,遇到的一个问题就是EOF. 它是end of file的缩写,表示"文字流"(stream)的结尾.这里的"文字流",可以是文件(file) ...

  7. c 语言中eof 是什么,什么是C编程语言中的EOF?

    从终端输入不会真的"结束"(除非设备已断开连接),但在终端中输入多个"文件"是有用的,因此键序列被保留以指示输入结束.在UNIX中,按键到EOF的转换由终端驱动 ...

  8. 【C语言】C语言中EOF的具体用法

    前言 在C语言中存在关键字EOF EOF是一个整数类型的宏定义,扩展为负数常量表达式(通常为-1).它被头文件中的好几个函数作为返回值使用,来表明已经到达文件尾或者示意一些其他的错误条件.它也被作为一 ...

  9. C语言中EOF含义及用法(新手向)

    EOF含义 是文件结束标志,英文全称(End of file) EOF的值为-1 常见用法 #include <stdio.h> int main() {char c;while ((c ...

最新文章

  1. 全网最细 | 21张图带你领略集合的线程不安全
  2. Jyputer 项目工程设置Github同步,本地代码上传Github实例演示
  3. Http协议中的各种长度限制总结
  4. 怎么查看自己安装的python版本_教你如何检查 Python 版本
  5. 计算机二级通app打不开,计算机二级通app
  6. Spring Boot2 集成 jasypt 3.0.4 配置文件敏感信息加密
  7. php判断pdf页码,PHP_PHP简单读取PDF页数的实现方法,本文实例讲述了PHP简单读取PDF - phpStudy...
  8. linux 系统文件目录颜色及特殊权限对应的颜色
  9. 未签名程序使用java_java applets(未签名)可以创建/读取cookie吗?
  10. 接口(interface)和抽象(abstract)类的区别
  11. 剑指Offer30-包含min函数的栈(单调栈)
  12. php session 跨子域,PHP session 跨子域问题总结
  13. HTML5与传统HTML的区别
  14. 算数平均法和加权平均法
  15. 冰汽朋克侦查机器人_冰汽时代机器人与人力效率对比分析 寒霜朋克机器人与人力哪个效率高...
  16. 添加背景音乐(visual stdio2019)
  17. 面试题:堆、栈、队列的区别以及使用场景
  18. 【AI学习总结】均方误差(Mean Square Error,MSE)与交叉熵(Cross Entropy,CE)损失函数
  19. mysql查询学生表的总人数_mysql数据库查询练习
  20. 【项目篇-项目选题与类型】创赛项目来源、项目选题建议;四种常见类型项目各自内容的侧重点与区别

热门文章

  1. Composing Text and Image for Image Retrieval - An Empirical OdysseyNam
  2. MAL-PEG-NH2,马来酰亚胺-PEG-胺|mal修饰Fe3O4活化磁珠200-300nm|mal修饰SiO2@Fe3O4磁珠200-300nm齐岳生物供应
  3. Android与MVC设计模式
  4. Windows8和MacOS10.9双系统安装及Mac常用软件安装--联想E49A
  5. 虚拟机LINUX系统下安装JKD(附详细操作过程截图)
  6. Go中的channel
  7. 八、基于多源数据建成区提取——Landsat数据大气校正
  8. 输出指定要求的回文日期与字符串拼接
  9. TCP/IP 协议详解内容总结
  10. Druid监控页面的配置和使用