C 文件操作

ZH408482684 2009-05-04 05:36:54
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define m 100
#define n 6
time_t start,end;
struct man
{
char num1[10]; // 账号
char name[10];//姓名
char num2[20];//身份证号
long int num3;//帐户余额
char num4[20]; // 密码
struct man *next;
};
struct man users[m];
char ZH1[10]={'1','0','0','0','\0'};
char ZH2[10]={'1','0','0','0','\0'};
char MM[m][20],y[10]={'1','\0'};
char mima[]={'1','0','0','0','\0'};//管理员密码
char c='\n';//输出时换行
int k=0;//ZH1 ZH1 为初始化储存账号 MM[][]为储存密码 k为现有用户数
struct man *p1,*last;// 作为申请空间的指针 last 最后一个指针
char *add(char x[100],char y[100])//大数加法运算 用于建立文件时使文件名自增
{
char *o;
int len1,len2,i,j,max;
o=(char *)malloc(sizeof(char)*100);
len1=strlen(x);
len2=strlen(y);
if(len1<len2)
{
for(i=len1,j=len2;i>0;i--,j--)
{
x[j-1]=x[i-1];
}
for(i=0;i<(len2-len1);i++)
{
x[i]='0';
}
x[len2]='\0';
max=len2;
}
else
{
for(i=len1,j=len2;j>0;i--,j--)
{
y[i-1]=y[j-1];
}
for(i=0;i<(len1-len2);i++)
{
y[i]='0';
}
y[len1]='\0';
max=len1;
}
for(i=max;i>0;i--)
{
o[i-1]=x[i-1]+y[i-1]-48;
if(o[i-1]>'9')
{
o[i-1]=o[i-1]-10;
x[i-2]=x[i-2]+1;
}
}
o[max]='\0';
return (o);
}
char * Fhzh ()//返回一个帐号
{
char ZH1[10]={'1','0','0','0','\0'};
char y[10]={'1','\0'};
char *p;
int i;
p=(char *)malloc(sizeof(char)*10);
strcpy(p,ZH1);
for(i=0;i<k;i++)
{
strcpy(p,add(y,p));
}
return p;
}
struct man * ZC()
{
struct man *head;
int i=0,j=0;
char tmp[20];
p1=(struct man *)malloc(sizeof(struct man));
printf("请输入姓名");
gets(p1->name);
printf("请输入身份证号");
gets(p1->num2);
printf("请输入一次密码");
while(i>=0 && (p1->num4[i++]=getch())!=13)
{
if(p1->num4[0]=='\b')
{
i=0;
continue;
}
else if(p1->num4[i-1]=='\b')
{
printf("%c%c%c",'\b','\0','\b');
i-=1;
}
else
putchar('*');
}
p1->num4[i-1]='\0';
printf("请再输入一次密码");
while(j>=0 && (tmp[j++]=getch())!=13)
{
if(tmp[0]=='\b')
{
j=0;
continue;
}
else if(tmp[j-1]=='\b')
{
printf("%c%c%c",'\b','\0','\b');
j-=1;
}
else
putchar('*');
}
tmp[j-1]='\0';
if(strcmp(tmp,p1->num4)==0)
{
printf("注册成功");
printf("您的账号为%s",Fhzh());
strcpy(p1->num1,Fhzh());
p1->num3=0;
k++;
if(k==1)
{
last=p1;
head=p1;
last->next=NULL;
}
else
{
last->next=p1;
last=last->next;
}
return head;
}
else
{
return NULL;
}
}
void cc(struct man * head)//存储 写成文件
{
FILE *fp;
struct man * p1;
p1=head;
while(p1!=NULL)
{
if(fp=fopen(p1->num1,"w+")==NULL)
{
printf("打开出错");
}
else
{
if(fwrite(p1,sizeof(struct man),1,fp)==1)
{
p1=p1->next;
}
else
{
printf("写入失败");
}
}
fclose(fp);
}
}
int main()
{
struct man * head;
head=ZC();
cc(head);
return 0;
}

我不能正常写入结构体中的信息 想知道原因! 谢谢
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZH408482684 2009-05-04
  • 打赏
  • 举报
回复
问题已解决!! 谢谢
liliangbao 2009-05-04
  • 打赏
  • 举报
回复
int main()
{
struct man * head = NULL;
head=ZC(); //判断head是否为空,同时最后要释放该内存
cc(head);
return 0;
}
lingyin55 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lingyin55 的回复:]
这句有问题if(fp=fopen(p1->num1,"w+")==NULL)
少了个括号if((fp=fopen(p1->num1,"w+"))==NULL)
[/Quote]

改了之后运行正常vs2008

请输入姓名zhangsan
请输入身份证号242143
请输入一次密码**请再输入一次密码**注册成功您的账号为1000Press any key to continu
e . . .
lingyin55 2009-05-04
  • 打赏
  • 举报
回复
这句有问题if(fp=fopen(p1->num1,"w+")==NULL)
少了个括号if((fp=fopen(p1->num1,"w+"))==NULL)
liliangbao 2009-05-04
  • 打赏
  • 举报
回复
帮顶~
ZH408482684 2009-05-04
  • 打赏
  • 举报
回复
不会吧 我用的vc6.0编译器 你用的啥啊?
wwoo_1105 2009-05-04
  • 打赏
  • 举报
回复
运行了,可以的啊

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧