| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1544 人关注过本帖
标题:结构体文件操作
只看楼主 加入收藏
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:9 
结构体文件操作
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Users
{
    char number[17];
    char name[14];
    char password[10];
    short mark;
    double cash;
}Use;
const long Len=sizeof(Use);
void oaccount()//开户
{
    long last;
    Use * p;
    FILE *fp;
    p = (Use *) malloc(sizeof(Use));
    fp = fopen("D:\\新建文件夹\\file.txt", "wb");
    printf("请输入账号:");
    scanf("%s", p->number);
    printf("请输入姓名:");
    scanf("%s", p->name);
    printf("请输入密码:");
    scanf("%s", p->password);
    p->cash=0;
    fwrite(p, sizeof(Use), 1, fp);
    fclose(fp);
    fp = fopen("D:\\新建文件夹\\file.txt", "rb");
    fread(p, sizeof(Use), 1, fp);
    printf("\n %s %s %s %lf", p->number, p->name, p->password, p->cash);
    fclose(fp);
    free(p);
}
void saving()
{
    Use *p;
    p = (Use *) malloc(sizeof(Use));
    p->number[17]="ss";//直接赋值后也无法输出,输出是空白。
    printf("\n%s", p->number);
}
void main()
{
    //oaccount();
    saving();
}
我:
我在开户的子函数中把结构体存进文件后,再在存款的子函数中读取文件,不能输出出来,输出的是乱码
我:
而且直接在存款子函数中给账号赋值,输出的是空白
懂得留个qq也可以吧
相互回复太费时了。
想直接讨教一下

搜索更多相关主题的帖子: 新建文件夹 password include double number 
2017-03-10 16:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
c中根本就不支持这种代码   p->number[17]="ss"

DO IT YOURSELF !
2017-03-10 20:42
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 2楼 wp231957
Use *p;
    p = (Use *) malloc(sizeof(Use));
    FILE *fp;
    fp = fopen("D:\\新建文件夹file.txt", "rb");
    fseek(fp,(long)k*Len,SEEK_SET);
    fread(p, sizeof(Use), 1, fp);
    printf("\n%lf",p->number);
    fclose(fp);
    free(p);
这种情况也不可以啊。。。
能介绍个方法吗??

育帝
2017-03-10 22:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
试试这个代码 如何
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Users
{
    char number[17];
    char name[14];
    char password[10];
    short mark;
    double cash;
}Use;

const long Len=sizeof(Use);

void saving(FILE * fp,Use* p)
{
    strcpy(p->number,"123456");
    strcpy(p->name,"张三");
    strcpy(p->password,"aaaaaa");
    p->mark=1;
    p->cash=123.50;
    fprintf(fp,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    strcpy(p->number,"123457");
    strcpy(p->name,"王老五");
    strcpy(p->password,"qqqqqq");
    p->mark=1;
    p->cash=1823.50;
    fprintf(fp,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    strcpy(p->number,"123458");
    strcpy(p->name,"李老六");
    strcpy(p->password,"444444");
    p->mark=1;
    p->cash=1223.50;
    fprintf(fp,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
}

void main()
{
    Use * p;
    FILE * fp;
    fp = fopen("D:\\file.txt", "w");
    p = (Use *) malloc(sizeof(Use));
    saving(fp,p);
    free(p);
    fclose(fp);
   
}
图片附件: 游客没有浏览图片的权限,请 登录注册



DO IT YOURSELF !
2017-03-11 08:16
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 4楼 wp231957
首先谢谢您帮我修改代码。您不要介意。但是怪我没有说清楚要求。我写的是一个银行卡管理系统。后面需要进行随机访问。而且老师要求用fread和fwrite进行文件操作。
并动态申请内存开户。
我一直想不明白如何把文件中的结构体输出。老师说我不能直接对字符串赋值。
我一直想不明白
void saving()
{
    double money;
    Use *p;
    p = (Use *) malloc(sizeof(Use));
    FILE *fp;
    fp = fopen("D:\\新建文件夹file.txt", "rb");
    fseek(fp,0L,SEEK_SET);
    printf("请输入要存款的金额:");
    scanf("%lf", &money);
    fwrite(p, sizeof(Use), 1, fp);
    printf("\n%lf",p->cash);
    fclose(fp);
    free(p);
}

写数据也写不进去。
如果调用文件输出信息(账号,密码之类),也不行
fp = fopen("D:\\新建文件夹file.txt", "rb");
    fseek(fp,0L,SEEK_SET);
fread(p, sizeof(Use), 1, fp);


我一直弄不懂。
您再允许我请求您帮我再看看吧

育帝
2017-03-11 09:00
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
其实这个结构体写入文件的  最好还是使用fprintf 来做
不过也可以变通的
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Users
{
    char number[17];
    char name[14];
    char password[10];
    short mark;
    double cash;
}Use;

const long Len=sizeof(Use);

void saving(FILE * fp,Use* p)
{
    char buf[42]={'\0'};
    strcpy(p->number,"123456");
    strcpy(p->name,"张三");
    strcpy(p->password,"aaaaaa");
    p->mark=1;
    p->cash=123.50;
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
    strcpy(p->number,"123457");
    strcpy(p->name,"王老五");
    strcpy(p->password,"qqqqqq");
    p->mark=1;
    p->cash=1823.50;
    memset(buf,'\0',41);
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
    strcpy(p->number,"123458");
    strcpy(p->name,"李老六");
    strcpy(p->password,"444444");
    p->mark=1;
    p->cash=1223.50;
    memset(buf,'\0',41);
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
}

void main()
{
    Use * p;
    FILE * fp;
    fp = fopen("D:\\file.txt", "w");
    p = (Use *) malloc(sizeof(Use));
    saving(fp,p);
    free(p);
    fclose(fp);
   
}



DO IT YOURSELF !
2017-03-11 09:27
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这是读取的代码:
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Users
{
    char number[17];
    char name[14];
    char password[10];
    short mark;
    double cash;
}Use;

const long Len=sizeof(Use);

void saving(FILE * fp,Use* p)
{
    char buf[42]={'\0'};
    strcpy(p->number,"123456");
    strcpy(p->name,"张三");
    strcpy(p->password,"aaaaaa");
    p->mark=1;
    p->cash=123.50;
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
    strcpy(p->number,"123457");
    strcpy(p->name,"王老五");
    strcpy(p->password,"qqqqqq");
    p->mark=1;
    p->cash=1823.50;
    memset(buf,'\0',41);
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
    strcpy(p->number,"123458");
    strcpy(p->name,"李老六");
    strcpy(p->password,"444444");
    p->mark=1;
    p->cash=1223.50;
    memset(buf,'\0',41);
    sprintf(buf,"%8s%8s%8s%6u%10.2lf\n",p->number,p->name,p->password,p->mark,p->cash);
    fwrite(buf,41,1,fp);
}

void main()
{
    Use * p;
    FILE * fp;
    fp = fopen("D:\\file.txt", "w");
    p = (Use *) malloc(sizeof(Use));
    saving(fp,p);
   
    fclose(fp);
    fp = fopen("D:\\file.txt", "r");
    char buf[42]={'\0'};
    fread(buf,41,1,fp);
    printf("%s",buf);
    fread(buf,41,1,fp);
    printf("%s",buf);
    fread(buf,41,1,fp);
    printf("%s",buf);
    free(p);
    fclose(fp);
   
}
/*

 123456    张三  aaaaaa     1    123.50

 123457  王老五  qqqqqq     1   1823.50

 123458  李老六  444444     1   1223.50
*/



DO IT YOURSELF !
2017-03-11 09:56
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 7楼 wp231957
麻烦问一下为什么sprintf和fwrite要一起使用呢

育帝
2017-03-11 13:33
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 7楼 wp231957
谢谢您的答复,还帮我修改代码。受累了。

育帝
2017-03-11 20:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用育帝在2017-3-11 13:33:58的发言:

麻烦问一下为什么sprintf和fwrite要一起使用呢


使用结构体来操作文件  最方便的是使用fprintf / fscanf 来进行读写操作

但你要求使用fread /fwrite 来操作  那只能变通一下了

DO IT YOURSELF !
2017-03-11 21:00
快速回复:结构体文件操作
数据加载中...
 
   



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

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