C语言的文件操作问题

优游幻世 发布于 2012/12/27 16:37
阅读 303
收藏 1
int getLine(char *buf,FILE *fp){
    int c;
    int i=0;
    c=fgetc(fp);
    while(c!='\n' && c!=EOF ) {
        buf[i++]=c;
        c=fgetc(fp);
    }
    buf[i]='\0';
    if(c=='\n')
        return 1;
    else return 0;
}
    FILE* fp=fopen("catalog.txt","r+");
    char name[40];
    char buf[200];
    tolower(db,name,40);
    while(getLine(buf,fp)){
        if(!strncmp("DB BEGIN",buf,strlen("DB_BEGIN"))){
            getLine(buf,fp);
            if(!strcmp(buf,name)) {
                int i;
                fscanf(fp,"%d\n",&i);
                for(int k=0;k<i;++k) {
                    getLine(buf,fp);
                }
                getLine(buf,fp);

            fprintf(fp,"%d",3);  //为什么这个fprintf无法改变文件的数据

                break;
            }
        }
    }

    fclose(fp);

这个C语言的文件操作太难搞了。。。

加载中
0
adler
adler

几点注意的地方,你挨个去检查下:

1、fopen添加调用检查,确保文件打开正常

2、getLine函数写的有问题:(1)buf[i]=c;i++; (2)if(c=='\n'||c==EOF)

3、while循环中添加打印,看看有没有跳进去,打印出buf的值,一步步来

另外,发帖注意下拍板啊,看的头疼

0
优游幻世
优游幻世
我觉得我还是去搞二进制的算了
0
中山野鬼
中山野鬼

引用来自“优游幻世”的答案

我觉得我还是去搞二进制的算了
不是难搞,是你没分层。你把文件操作和你的程序设计目标逻辑混一块了。你单独把所有文件操作整理到一块,对文件的内容,自己开个BUF,这样或许你的代码更清爽,更健壮。
返回顶部
顶部