C问题:文件中有(-1)怎么办

来源:百度知道 编辑:UC知道 时间:2024/06/30 02:37:02
读入一个字符,若它等于EOF就说明到了文件末了
那万一文件中存放了一个EOF字符咋办

stdio.h
#define EOF (-1)
是不是这种判断方式就不行了

读到字符EOF,文件的读不会结束。

只有当文件或输入流结束时,某些读语句送返的EOF才起作用。

例如:
if ( fscanf(fin\",....\",&a,...) ==EOF) goto Lab_end;
注意,是送返EOF,不是读到EOF。

由fscanf return 送返的 EOF 才是文件或输入流结束。

feof函数 也可判断是否文件或输入流结束。

就算你文件中存了EOF或者-1,都没用。因为fscanf是用来从文件中读字符的,而宏定义的常量EOF只作用于源代码(意识到这一点非常重要),不会作用于你的文件流。所以你存在文件中的EOF在fscanf看来分别是3个字符'E', 'O', 'F',而-1也被当两个字符'-','1',一个一个地读取,而不会像你想当然地那样把EOF这三个字符整个地读进来,就算你把你文件中存的那个EOF字段当成整个字符串读取出来,也没用,只有源代码里面非字符串或注释部分出现的EOF编译器才能识别就是stdio.h里面通过宏定义的那个标志文件结尾的符号化常量,况且这一部分也是在你的源代码编译的预处理阶段的事情,可以说跟你现在用fscanf开始读取文件流的字符文档风马牛不相及!另外,正如楼上给你指出的,EOF是fscanf这类输入函数尝试在你提供的文件输入流里面读取下一个字符失败后返回的标志文件结束的值。在你的源代码编译的预处理阶段,像fscanf(fin\",....\",&a,...) == EOF里面的EOF就已经被换成了stdio.h里面定义的值了,这个值究竟是不是-1根本没太大的关系,你不要以为你源代码里面其他出现了-1的地方会受到影响或者影响到EOF,不会,这正是宏定义符号化常量的优点所在。只要那些输入函数到达文件流末尾返回的值与EOF匹配就行。除非你非要在你的源代码里面写个什么
if ( EOF == -1 )
printf( "Aha, I see!\n" );
但是这没有什么