杨林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条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿