读书人

大家看看小弟我这个C程序文件如何保存

发布时间: 2012-03-19 22:03:05 作者: rapoo

大家看看我这个C程序文件怎么保存啊?
我现在做课程设计,其它都差不多好了,就差怎么样把程序中输入的数据保存了,我们讲文件的时候这里是一带而过的,每次把输入的数据再调出来的时候就显示不出来,请大家帮帮忙。#include <stdio.h>
#include <string.h>
#define SIZE 100
menu1()
{int a;clrscr();
printf( "-------------------- ");
printf( "welcome to use the systerm of yundongyuan ");
printf( "--------------------\n ");
printf( "\t\t\t1.luru chengji\n ");
printf( "\t\t\t2.shuchu chengji\n ");
printf( "\t\t\t3.chaxun yundongyuan\n ");
printf( "\t\t\t4.xiugai ziliao\n ");
printf( "\t\t\t5.xiangmu xingxi\n ");
printf( "\t\t\t6.duiwu xingxi\n ");
printf( "\t\t\t7.likai\n ");
printf( "input your choice: ");
scanf( "%d ",&a);
while(a <0||a> 7)
{printf( "error!try again!\n ");
printf( "input your choice: ");
scanf( "%d ",&a);}
switch(a)
{case 1:input_yund();break;
case 2:show_yund();break;
case 3:search_yund();break;
case 4:change_yund();break;
case 5:xiangmu_information();break;
case 6:team_information();break;
case 7:menu2();exit();
}
}
menu2()
{clrscr();printf( "\n\n\n\n\n\n\n\n ");
printf( "\t\t------------- ");
printf( "thanks to use ");
printf( "------------- ");getch();
}

struct yundongyuan
{char name[100];
char team[100];
char xiangmu[100];
int mingci;
float chengji;
}yund[SIZE];

struct xiangmu
{char name[10];
char team[10];
char xiangmu[10];
int mingci;
float chengji;
}xiang[10];

struct team
{char team[10];
int score;
} team[10];


void save()
{FILE *fp;
int i;
if((fp=fopen( "yund_list.c ", "ab+ "))==NULL)
{printf( "cannot open file\n ");
return;
}
for(i=0;i <SIZE;i++)
{if(fwrite(&yund[i],sizeof(struct yundongyuan),1,fp)!=1)
printf( "file write error\n "); }
fclose(fp);
}

void load()
{FILE *fp;
int i;
if((fp=fopen( "yund_dat.c ", "ab+ "))==NULL)
{printf( "cannot open file\n ");
return;}
for(i=0;i <SIZE;i++)
if(fread(&yund[i],sizeof(struct yundongyuan),1,fp)!=1)
{if(feof(fp)){fclose(fp);return;}
printf( "file read error\n ");
}
fclose(fp);
}


input_yund()
{int i; FILE *fp; fp=fopen( "yund_list.c ", "ab+ ");
printf( "please input the information of yundongyuan ");
for(i=0;i <SIZE;i++);

scanf( "%10s%10s%10s%10d%10f\n ",yund[i].name,yund[i].team,yund[i].xiangmu,&yund[i].mingci,&yund[i].chengji);
save(); fclose(fp);
}
show_yund()
{int i;
FILE *fp;
fp=fopen( "yund_list.c ", "ab+ ");
for(i=0;i <SIZE;i++)
{fread(&yund[i],sizeof(struct yundongyuan),1,fp);
printf( "%10s%10s%10s%10d%10f\n ",yund[i].name,yund[i].team,yund[i].xiangmu


,yund[i].mingci,yund[i].chengji);
}
fclose(fp);
}
search_yund()
{int i;
char str1[10];
FILE *fp;
fp=fopen( "yund_list.c ", "ab+ ");
printf( "please input the name of yundongyuan ");
scanf( "%s ",str1);
for(i=0;i <SIZE;i++)
{if(strcmp(str1,yund[i].name)==0)
printf( "____name___team__xiangmu___mingci___chengji__\n ");
printf( "%10s%10s%10s%10d%10f ",yund[i].name,yund[i].team,yund[i].xiangmu,yund[i].mingci,yund[i].chengji);
break;}
fclose(fp);
}


change_yund()
{int i,b,c;
char str[10];
FILE *fp;
fp=fopen( "yund_list.c ", "ab+ ");
printf( "input the yundongyuan`s name :\n ");
scanf( "%s ",str);
for(i=0;i <100;i++)
{if(strcmp(str,yund[i].name)==0)
printf( "name team xiangmu mingci chengji\n ");
printf( "\t\t%10s%10s%10s%10d\t%10f\n ",yund[i].name,yund[i].team,yund[i].xiangmu,yund[i].mingci,
yund[i].chengji); c=i;
break;}
printf( "choose which you want to change:\n ");
printf( "1.name 2.team 3.xiangmu 4.mingci 5.chengji 6.back ");
scanf( "%d ",&b);
switch(b)
{case 1:printf( "input new name: ");scanf( "%s ",yund[c].name);break;
case 2:printf( "input new team: ");scanf( "%s ",yund[c].team);break;
case 3:printf( "input new xiangmu: ");scanf( "%s ",yund[c].xiangmu);break;
case 4:printf( "input new mingci: ");scanf( "%d ",&yund[c].mingci);break;
case 5:printf( "input new chengji: ");scanf( "%f ",&yund[c].chengji);break;
case 6:menu1();break;
}fclose(fp);
}
xiangmu_information()
{ int i,j=0,k; float z; char str2[10],str3[10],str4[10];
FILE *fp;
fp=fopen( "yund_list.c ", "ab+ ");
printf( "please input the name of xiangmu ");
scanf( "%s ",str2);
for(i=0;i <SIZE;i++)
{if(strcmp(str2,yund[i].xiangmu)==0)
{strcpy(xiang[j].name,yund[i].name);
strcpy(xiang[j].team,yund[i].team);
strcpy(xiang[j].xiangmu,yund[i].xiangmu);
xiang[j].mingci=yund[i].mingci;
xiang[j].chengji=yund[i].chengji;j++;}
}fclose(fp);

for(i=0;i <=9;i++)
{for(j=0;j <9-i;j++)
{if(xiang[j].mingci <xiang[j+1].mingci)
{strcpy(str3,xiang[j].name);
strcpy(xiang[j].name,xiang[j+1].name);
strcpy(xiang[j+1].name,str3);
strcpy(str4,xiang[j].team);
strcpy(xiang[j].team,xiang[j+1].team);
strcpy(xiang[j+1].team,str4);
k=xiang[j].mingci;xiang[j].mingci=xiang[j+1].mingci;xiang[j+1].mingci=k;
z=xiang[j].chengji;xiang[j].chengji=xiang[j+1].chengji;xiang[j+1].chengji=z;}
}


}
for(j=0;j <=9;j++)
{printf( "\t\t%10s%10s%10s%13d\t%10f ",xiang[j].name,xiang[j].team,xiang[j].xiangmu,xiang[j].mingci,xiang[j].chengji)
;}fclose(fp);
}

team_information()
{int i,j,m;char str5[10];
FILE *fp;
fp=fopen( "yund_list.c ", "ab+ ");
for(j=0;j <=9;j++)
{scanf( "%s ",team[j].team);team[j].score=0;
for(i=0;i <=SIZE;i++)
{if(strcmp(team[j].team,yund[i].team)==0)
if(yund[i].mingci==3)
team[j].score=team[j].score+1;
if(yund[i].mingci==2)
team[j].score=team[j].score+2;
if(yund[i].mingci==1)
team[j].score=team[j].score+3;
}
}
for(i=0;i <=9;i++)
{for(j=0;j <=9-i;j++)
{if(team[j].score> team[j+1].score)
{strcpy(str5,team[j].score);strcpy(team[j].score,team[j+1].score);strcpy(team[j+1].score,str5);
m=team[j].score;team[j].score=team[j+1].score;team[j+1].score=m;
}
}
}
for(j=0;j <=9;j++)
{printf( "%s%d\n ",team[j].team,team[j].score);}fclose(fp);
}


void main()
{load();
menu1();
getch();
}

[解决办法]
你这问题都很基础哈,没人答我来答。
for(i=0;i <SIZE;i++); //这里问题明显,“;”加在这里整个循环是在空循环,

scanf( "%10s%10s%10s%10d%10f\n ",yund[i].name,yund[i].team,yund[i].xiangmu,&yund[i].mingci,&yund[i].chengji);//这里输入格式有问题 都这么长的数据么?这样输入太费劲了吧 后面的\n也去掉

还有就是怎么两次打开关闭文件,建议打开文件关闭文件在,输入函数里,save函数调用文件指针就可以了。
建议1:数据存入文件用fprintf函数。
建议2:给输入加条件,固定这么大循环,得输入到什么时候
[解决办法]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 5

struct ath
{
char name[10];
char item[10];
char team[10];
intorder;
float score;
}athlete[SIZE];

void input_info()
{
int i;
FILE *pf = NULL;
if( (pf = fopen( "data.dat ", "wb+ ")) == NULL)
printf( "Can 't open Data file!! ");
printf( "Please inpout athlete 's info(%d in all):\n ",SIZE);
for(i = 0; i < SIZE; i++)
{
printf( "Please inpout %d athlete 's info:\n ",i+1);
printf( "\rNAME:\n ");
while(scanf( "%s ",athlete[i].name) != 1)
{
printf( "input name error!\n ");
printf( "Please input name again!\n ");
}
printf( "ITEM:\n ");
while(scanf( "%s ",athlete[i].item) != 1)
{
printf( "input item error!\n ");
printf( "Please input item again!\n ");
}
printf( "TEAM:\n ");
while(scanf( "%s ",athlete[i].team) != 1)
{
printf( "input team error!\n ");
printf( "Please input team again!\n ");
}
printf( "order:\n ");
while(scanf( "%d ",&athlete[i].order) != 1)
{
printf( "input order error!\n ");
printf( "Please input order again!\n ");
}
printf( "score:\n ");
while(scanf( "%f ",&athlete[i].score) != 1)
{
printf( "input score error!\n ");
printf( "Please input score again!\n ");
}
fwrite(&athlete[i],sizeof(struct ath), 1, pf);
}
fclose(pf);
}

void show_info()
{
int i;
printf( "Athlete Infonation:\n ");
printf( "\rname item team order score:\n ");


for(i = 0; i < SIZE; i ++)
{
printf( "%-10s%-10s%-10s%d%21f\n ",athlete[i].name,athlete[i].item,athlete[i].team,athlete[i].order,athlete[i].score);
}
}

void Query_info()
{
char str[10];
int i;
int bfind = 0;
char exit = 'y ';
while(exit == 'y ' || exit == 'Y ')
{
printf( "Please input name to query:\n ");
scanf( "%s ",str);
for(i = 0; i < SIZE; i ++)
if(strcmp(str,athlete[i].name) == 0)
{
printf( "Athlete Infonation:\n ");
printf( "\rname item team order score:\n ");
printf( "%-10s%-10s%-10s%d%21f\n ",athlete[i].name,athlete[i].item,athlete[i].team,athlete[i].order,athlete[i].score);
bfind = 1;
printf( "select \ "y\ "to continue\n ");
printf( "Other to exit:\n ");
scanf( "%s ",&exit);
break;
}
if(bfind == 0)
{
printf( "can 't find the athlete 's info! ");
printf( "select \ "y\ "to continue\n ");
printf( "Other to exit:\n ");
scanf( "%s ",&exit);
}
}
}

void update_info()
{
char str[10];
int i;
int bfind = 0;
char exit = 'y ';
while(exit == 'y ' || exit == 'Y ')
{
printf( "Please input name to update:\n ");
scanf( "%s ",str);
for(i = 0; i < SIZE; i ++)
if(strcmp(str,athlete[i].name) == 0)
{
printf( "Input Athlete 's New Infonation:\n ");
printf( "\rNAME:\n ");
while(scanf( "%s ",athlete[i].name) != 1)
{
printf( "input name error!\n ");
printf( "Please input name again!\n ");
}
printf( "ITEM:\n ");
while(scanf( "%s ",athlete[i].item) != 1)
{
printf( "input item error!\n ");
printf( "Please input item again!\n ");
}
printf( "TEAM:\n ");
while(scanf( "%s ",athlete[i].team) != 1)
{
printf( "input team error!\n ");
printf( "Please input team again!\n ");
}
printf( "order:\n ");
while(scanf( "%d ",&athlete[i].order) != 1)
{
printf( "input order error!\n ");
printf( "Please input order again!\n ");
}
printf( "score:\n ");
while(scanf( "%f ",&athlete[i].score) != 1)
{
printf( "input score error!\n ");
printf( "Please input score again!\n ");
}
bfind = 1;
printf( "select \ "y\ "to continue\n ");
printf( "Other to exit:\n ");
scanf( "%s ",&exit);
break;
}
if(bfind == 0)
{
printf( "can 't find the athlete 's info! ");
printf( "select \ "y\ "to continue\n ");
printf( "Other to exit:\n ");
scanf( "%s ",&exit);
}
}
}

void exit_sys()
{
int i;
FILE *pf = NULL;
if( (pf = fopen( "data.dat ", "wb+ ")) == NULL)
printf( "Can 't open Data file!! ");
for(i = 0; i < SIZE; i++)
{
fwrite(&athlete[i],sizeof(struct ath), 1, pf);
}
fclose(pf);
}

void Load()
{
int i;


FILE *pf = NULL;
if( (pf = fopen( "data.dat ", "rb+ ")) == NULL)
printf( "Can 't open Data file!! ");
for(i = 0; i < SIZE; i++)
{
if(feof(pf))
break;
fread(&athlete[i],sizeof(struct ath), 1, pf);
}
fclose(pf);
}

void menu()
{
int a;
printf( "-------------------- ");
printf( "welcome to use the systerm of athlete ");
printf( "--------------------\n ");
printf( "\t\t\t1.input result\n ");
printf( "\t\t\t2.show result\n ");
printf( "\t\t\t3.query athlete\n ");
printf( "\t\t\t4.update data\n ");
printf( "\t\t\t5.exit\n ");
printf( "input your choice: ");
scanf( "%d ",&a);
while(a <0||a> 5)
{
printf( "error!try again!\n ");
printf( "input your choice: ");
scanf( "%d ",&a);
}
switch(a)
{
case 1:input_info();
break;
case 2:show_info();
break;
case 3:Query_info();
break;
case 4:update_info();
break;
case 5:exit_sys();
break;
}
}

void main()
{
char exit = 'y ';
Load();
while(exit == 'y ' || exit == 'Y ')
{
menu();
printf( "select \ "y\ "to continue\n ");
printf( "Other to exit:\n ");
scanf( "%s ",&exit);
}
}


我写的简单程序

读书人网 >C语言

热点推荐