关于C语言读取文件结尾的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言读取文件结尾的问题相关的知识,希望对你有一定的参考价值。

请问,我弄个小程序,从A文件中读取内容输出到B文件,原先读A文件结尾的判断条件为EOF,可是后来A文件末尾多了个“]”符号,在不删除它的情况下,我应该怎么做文件结束条件啊?谢谢各位

可以使用while循环
如:
while(fscanf(fp,"%s",str)!=EOF) 其中这个判断 EOF 就是是否读取到文件结尾
是 end of file的缩写.
参考技术A 不做任何改动

文件结束时相关函数返回EOF, 并不是说文件里有个符号是EOF, 根本就不存在所谓的文件结束符,而是到了文件结束,就什么也读不到了,这种情况下函数返回一个EOF,这个EOF并不是文件的内容(至于判断文件结束,不同的系统有不同的底层实现,这不是C语言的事情)追问

那请问,我该怎么办啊?有这个符号就死循环啊

追答

贴代码看看

参考技术B c语言程序编译不是c语言学习的范围,你说的这个情况是通过编译程序将你写的源程序*.c编译成可执行文件,如果你需要修改就必须有这个程序的源代码,也就是你写的*.c。修改只能在这上面修改。所以程序的源代码都是很重要的,需要好好保存。 参考技术C EOF是特殊符号,永远在文件最后一个。你的程序不用任何改动,判断EOF即可。追问

可是不是这样的呀,要是有这个符号,就是死循环啦,没它就一切正常。
我是多去多行数据,判断的条件就是读完每行是否=EOF,现在就不行了

追答

只要行末是EOF就是文件结束了咯,不是很明白你是怎么判断的。

参考技术D 你能是你顺序错了把,要不就是你把eof读成char了
int temp;
while((temp=fgetc(fp))!=EOF)

...
...

试试追问

我用的是这个语句:多行数据
while(fscanf(fa,"%d%s%s\n",&a1,a2,a3)!=EOF
和您的应该是一个意思吧

追答

fscanf return0代表读完了
说以你试试
while(fscanf(fa,"%d%s%s\n",&a1,a2,a3)!=0)

本回答被提问者采纳

C语言如何读取TXT全部字符?

参考技术A 你可以使用输入输出重定向来将TXT文本中的字符内容导入程序中,或者使用标准C库函数:fopen()和fgetc();
先使用fopen()函数打开TXT文本文件,然后使用fgetc读取文本文件中的字符。读取全部文本中全部字符可以使用一个while循环加判断是否读取到文件结尾来实现:
char
ch;
while((ch=
fgetc(fp))
!=
EOF)
这样当读取到文件结尾时,while循环就会终止。

以上是关于关于C语言读取文件结尾的问题的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 文件结尾判定 )

C语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?

C语言如何读取TXT全部字符?

C 语言文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )

关于C语言中文本文件的逐行读取的实现

c语言 如何读取中文字符串