| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:有关读文件的问题
只看楼主 加入收藏
peace1221
Rank: 2
等 级:论坛游民
帖 子:32
专家分:35
注 册:2010-7-9
结帖率:57.14%
收藏
已结贴  问题点数:5 回复次数:5 
有关读文件的问题
不知道为什么,屏幕上输出的总比原来文件中多了一个字符,比如我的文件内容为Thanks,则输出的是thankss,
我的程序如下:
#include<stdio.h>
#include<process.h>
int main(void)
{
    FILE *fp;
    char ch;
    int i=1;

    if((fp=fopen("f3.txt","r"))==NULL){
        printf("Can not open the file!");
        exit(1);
    }
    while(!feof(fp)){

        fscanf(fp,"%c",&ch);
        if(ch=='\n')
            i++;
        if('A'<=ch&&ch<='Z')
            ch=ch+32;
        printf("%c",ch);
        
    };
    printf("\ni=%d",i);
    fclose(fp);


    return 0;

}
各位帮忙看看哪里有问题?
搜索更多相关主题的帖子: 文件 
2010-08-19 13:23
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:1 
while(fscanf(fp,"%c",&ch) != EOF){

这样试试吧,御坂御坂猜测着

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-19 13:26
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:2 
feof这个函数用来判断文件结束其实并不太合适,
因为foef读到文件结束符EOF的时候,并不会返回非0值,表示到结尾了,
而是会再往后读一个字符,然后发现不成功,返回非0值表示已到达文件结尾。
改成while(fscanf(fp,"%c",&ch) != EOF)是可行的办法。
2010-08-19 14:06
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:2 
导致这个错误的原因是 feof(FILE*) 判断文件末尾的机制:文件指针在文件末尾的时候,除非再读一次导致发生 I/O 错误,feof(FILE*) 依然返回 0。因此用 feof(FILE*) 作为判断条件的 while 循环始终会多读一次,而最后一次的读取是失败的,看起来就像是重复读了一次。

[ 本帖最后由 heartnheart 于 2010-8-19 15:17 编辑 ]
2010-08-19 14:48
sonicyouth
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2010-8-19
收藏
得分:0 
同意楼上的,本人小菜~
2010-08-19 15:01
peace1221
Rank: 2
等 级:论坛游民
帖 子:32
专家分:35
注 册:2010-7-9
收藏
得分:0 
可是为什么有时候用feof却不会出现重读的现象呢?比如
#include<stdio.h>
#include<process.h>
int main(void)
{   
   FILE *fp1,*fp2;
   char c;

if((fp1=fopen("f1.txt","r"))==NULL){
printf("File open error!\n");
exit(0);
}
if((fp2=fopen("f2.txt","w"))==NULL){
printf("File open error!\n");
exit(0);
}
while(!feof(fp1)){
c=fgetc(fp1);
fputc(c,fp2);
}
fclose(fp1);
fclose(fp2);

return 0;
}
我想知道在什么情况下使用feof不会有问题呢?
2010-08-20 10:13
快速回复:有关读文件的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016147 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved