【C/C++】点滴基础知识(EOF,sscanf)

本文详细介绍了C/C++中的EOF概念,它不是一个特殊字符,而是表示文件或标准输入结束的信号值。同时,文章讲解了sscanf函数的使用,包括如何通过格式化输入来提取字符串、整数和浮点数。通过对样例代码的分析,解释了如何利用sscanf高效处理定界符分隔的字符串数据。
摘要由CSDN通过智能技术生成

 EOF

 学习C语言的时候,遇到的一个问题就是EOF

 它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。

比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。

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

很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。

但是,后来发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1

#define  EOF  (-1)

于是,我就困惑了。

如果EOF是一个特殊字符,那么假定每个文本文件的结尾都有一个EOF(也就是-1),还是可以做到的,因为文本对应的ASCII码都是正值,不可能有负值。但是,二进制文件怎么办呢?怎么处理文件内部包含的-1呢?

这个问题让我想了很久,后来查了资料才知道,在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值(也就是-1)。至于系统怎么知道文件的结尾,资料上说是通过比较文件的长度。

所以,处理文件可以写成下面这样:

int c;
while ((c = fgetc(fp)) != EOF) 
{
        do something
}

这样写有一个问题。fgetc()不仅是遇到文件结尾时返回EOF,而且当发生错误时,也会返回EOF。因此,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值