| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1264 人关注过本帖
标题:文件的输入和输出
只看楼主 加入收藏
wly2014
Rank: 2
等 级:论坛游民
帖 子:29
专家分:19
注 册:2014-2-25
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:24 
文件的输入和输出
#include <stdio.h>
#include <stdlib.h>
struct     Records{
    char driver[10];
    int car;

};

int main(int argc, char *argv[])
{
    int i;
    struct     Records *file[10];
    FILE *fp1,*fp2;
    if((fp1=fopen("f:\\t.txt","r"))==NULL){
        printf("Do not find!\n");
        exit(1);
    }
    if((fp2=fopen("f:\\t1.txt","w"))==NULL){
        printf("Do not write!\n");
        exit(2);
    }
    for(i=0;i<10;i++){
        fscanf(fp1,"%s%d",file[i].driver,file[i].car);
    }
    for(i=0;i<10;i++){
        fprintf(fp2,"%s %d\n",*(file[i].driver),*(file[i].car));
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}

这是我的代码,我想在一个文件中读入数据,然后再输出到另一个文件中,要求是:要读入的文件的每一行信息是一个整体(一个结构体中的全部信息),但在编译错误,我不太懂,很可能是指针使用错误,望大神们赐教;
搜索更多相关主题的帖子: include write file 
2014-04-18 23:55
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:5 
#include <stdio.h>
#include <stdlib.h>
struct     Records{
    char driver[10];
    int car;

};

int main(int argc, char *argv[])
{
    int i;
    struct     Records *file[10];
    FILE *fp1,*fp2;
    if((fp1=fopen("f:\\t.txt","r"))==NULL){
        printf("Do not find!\n");
        exit(1);
    }
    if((fp2=fopen("f:\\t1.txt","w"))==NULL){
        printf("Do not write!\n");
        exit(2);
    }
    for(i=0;i<10;i++){
        file[i]=(struct Records *)malloc(sizeof(struct Records));    //你没有为指针数组申请空间
         //fscanf(fp1,"%s%d",file[i].driver,file[i].car);        //file[i]是指针,不是结构体不能直接用成员运算,下同
        fscanf(fp1,"%s%d",file[i]->driver,&file[i]->car);        }
    for(i=0;i<10;i++){
       // fprintf(fp2,"%s %d\n",*(file[i].driver),*(file[i].car));
        fprintf(fp2,"%s%d",file[i]->driver,file[i]->car);   
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}

2014-04-19 07:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
上面測試過自己的代碼沒有?

授人以渔,不授人以鱼。
2014-04-19 08:41
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
另,实际上上边的程序可以简化一些:
int main()
{
    int i;
    struct  Records t;
    FILE *fp1,*fp2;

    if((fp1=fopen("f:\\t.txt","r"))==NULL){        
        printf("Do not find!\n");
        exit(1);
    }
    if((fp2=fopen("f:\\t1.txt","w"))==NULL){
        printf("Do not write!\n");
        exit(2);
    }

    for(i=0;i<10;i++){
        fscanf(fp1,"%s%d",t.driver,&t.car);  
        fprintf(fp2,"%s %d\n",t.driver,t.car);     //不好意思刚才没有注意到输出的格式     
    }

    fclose(fp1);
    fclose(fp2);

    return 0;
}


[ 本帖最后由 ying8501 于 2014-4-19 13:25 编辑 ]
2014-04-19 08:43
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 3 楼 TonyDeng
版主,不好意思,我测试的文件跟上边的不太一样。为了尽可能的按楼主的思路走,测试完又尽量改成与楼主的程序一致。
2014-04-19 08:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你們用fprintf()和scanf()是一定錯的,字符串的長度並不固定,不能用fscanf()把數據讀準確了。多用幾組數據去測試自己的程序就知道了。

授人以渔,不授人以鱼。
2014-04-19 08:52
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
我的想法是,尽可能的按楼主的思路走,楼主会容易理解,对他的帮助会大一点。
2014-04-19 08:52
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
回复 6 楼 TonyDeng
不会错,只要数据文件t.txt中式按格式放,两个数据中间有空格分离,就没有任何问题。
如,t.txt:
zhang 123
wang 456
li 789
zhao 987
sun 989
qian 7848
fu 89374
huang 9898
xu 234
lin 645
2014-04-19 08:56
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
但是,如果t.txt中数据格式不对,自然会出错。
2014-04-19 08:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不要想當然,字符串並不都是字母,也不會沒有空格!你這種就叫湊測試數據。

授人以渔,不授人以鱼。
2014-04-19 09:00
快速回复:文件的输入和输出
数据加载中...
 
   



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

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