杨林Yang 2015-05-13 04:16 采纳率: 50%
浏览 2388
已采纳

C语言文件fwrite的问题

我用fwrite对文件进行更新时,却将我想更新行数之前的全都清空了,改怎么写才对啊
比如想更新第二行,却将第一行重写了
#include
#include
#include

typedef struct{
int number;
char name[20];
int age;
char gender[5];
} Student;
char filename[20];

int main(void){
FILE * fp=NULL;
void creatFile(FILE * fp);
void insertStudent();
void queryStudent();
void updateStudent();
void deleteStudent();
void displayAll();
void quit();
int choose =1;
while (choose){
printf(" *****************please choose function******************* \n");
printf(" 1:creatfile 2:insert studnet information \n");
printf(" 3:query Studnet information 4:update studnet information \n");
printf(" 5:delete information 6: display file ** \n");
printf(" **
******************** 0:exit *****************************\n");
printf(" ******please choose the function******\n ");
scanf ("%d",&choose );
switch(choose){
case 1:creatFile(fp);break ;
case 2:insertStudent();break;
case 3:queryStudent();break;
case 4:updateStudent();break;
case 5:deleteStudent();break;
case 6:displayAll();break;
case 0:quit();break;
}
printf(" ******please press 1 to return menu*****\n ");
scanf ("%d",&choose );
}
return 0;
}

void creatFile(FILE * fp){
printf(" *****please enter filename*****\n ");
scanf("%s",filename);
if((fp=fopen(filename,"ab+"))==NULL)
{
printf("can't open file\n");
getchar();
exit(0);
}
else{
printf(" open file success\n");
}
}

void insertStudent(){
FILE * fp;
if((fp=fopen(filename,"ab"))==NULL) {
printf(" file open failure\n");
}
else{
int flag=1;
while(flag){
Student stu;
printf(" ****please enter student information****\n");
printf(" enter student number:\n");
scanf("%d",&stu.number);
printf(" enter student name:\n");
scanf("%s",stu.name);
printf(" enter student age:\n");
scanf("%d",&stu.age);
printf(" enter student gender:\n");
scanf("%s",stu.gender);
fwrite(&stu,sizeof(Student),1,fp);
printf(" continue? 1(yes) or 0(no) \n");
scanf("%d",&flag);
}
fclose(fp);
}
}

void queryStudent(){

FILE * fp;
Student stu;
int number;
fp=fopen(filename,"rb");
printf(" please enter the number which you want to query\n");
scanf("%d",&number);
fseek(fp,number*sizeof(Student),0);
fread(&stu,sizeof(Student),1,fp);
printf(" number name age gender\n");
printf("%10d%10s%10d%10s\n",stu.number,stu.name,stu.age,stu.gender);
fclose(fp);
}

void updateStudent(){
FILE* fp;
Student stu;
if((fp=fopen(filename,"wb"))==NULL){
printf("can't find the file\n");
exit(0);
}
else{
int number;
printf(" please enter the number which you want to update\n");
scanf("%d",&number);
fseek(fp,number*sizeof(Student),0);
printf(" enter student number:\n");
scanf("%d",&stu.number);
printf(" enter student name:\n");
scanf("%s",stu.name);
printf(" enter student age:\n");
scanf("%d",&stu.age);
printf(" enter student gender:\n");
scanf("%s",stu.gender);
fwrite(&stu,sizeof(Student),1,fp);
printf("update success\n");
fclose(fp);
}
}

void deleteStudent(){

FILE* fp;
Student stu;
if((fp=fopen(filename,"wb"))==NULL){
printf("can't find the file\n");
exit(0);
}
else{
int number;
printf(" please enter the number which you want to delete\n");
scanf("%d",&number);
fseek(fp,number*sizeof(Student),0);
stu.age=stu.number=NULL;
strcpy(stu.name,"");
strcpy(stu.gender,"");
fwrite(&stu,sizeof(Student),1,fp);
printf("delete success\n");
fclose(fp);

}
}

void displayAll(){
FILE* fp;
Student stu;
if((fp=fopen(filename,"rb"))==NULL){
printf("can't find the file\n");
exit(0);
}
else{
printf(" number name age gender\n");
while(!feof(fp)){
fread(&stu,sizeof(Student),1,fp);
printf("%10d%10s%10d%10s\n",stu.number,stu.name,stu.age,stu.gender);
}
fclose(fp);
}
}

void quit(){
printf("exit************\n");
exit(0);}

  • 写回答

6条回答

  • oyljerry 2015-05-13 06:02
    关注

    需要添加内容可以用w+或者a的方式打开文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图