#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<math.h>
#define LEN sizeof(struct STU)
char *p_in="%s%s%s%d%d%d%d%d";
char *p_out="%-15s%-8s%-12s%-12d%-12d%-12d%-12d%-12d%-12d\n";
struct STU
{
char id[15];
char name[10];
char zhuanye[20];
int sc_1;
int sc_2;
int sc_3;
int sc_4;
int sc_5;
};
struct STU stu[200];
void in()
{
int m=0,i,cho;
FILE *fp;
m=input("stu.txt",stu);
printf("%d\n",m);
if(m==0)
{
printf("\t \t文件中没有记录!\n");
}
else
{
p_int(stu,m);
}
if((fp=fopen("stu.txt","ab+"))==NULL)
{
printf("文件不存在!\n");
return;
}
printf("\t \t是否输入学生信息\n");
printf("\t \t确认选1\n\t \t不确认选2\n");
scanf("%d",&cho);
while(cho==1)
{
printf("\t \t********************\n");
printf("\t \t请输入学生学号:");
scanf("%d",&stu[m].id );
for(i=0;i<m;i++)
{
if(stu[i].id==stu[m].id)
{
printf("该学号已经存在了,按任意键继续!");
fclose(fp);
return;
}
printf("\t \t请输入学生姓名:");
scanf("%s",stu[m].name ); /*输入学生姓名*/
printf("\t \t请输入学生专业:");
scanf("%s",stu[m].zhuanye ); /*输入学生专业*/
printf("\t \t请输入学生C语言成绩:");
scanf("%d",&stu[m].sc_1); /*输入学生姓名*/
printf("\t \t请输入学生计算物理学成绩:");
scanf("%d",&stu[m].sc_2); /*输入学生姓名*/
printf("\t \t请输入学生大学物理成绩:");
scanf("%d",&stu[m].sc_3); /*输入学生姓名*/
printf("\t \t请输入学生原子物理成绩:");
scanf("%d",&stu[m].sc_4); /*输入学生姓名*/
printf("\t \t请输入学生光学成绩:");
scanf("%d",&stu[m].sc_5); /*输入学生姓名*/
// int id;
// id=(int);
fprintf(fp,"\n%-15s%-8s%-12s%-12d%-12d%-12d%-12d%-12d",stu[m].id,stu[m].name ,stu[m].zhuanye ,
stu[m].sc_1,stu[m].sc_2,stu[m].sc_3,stu[m].sc_4,stu[m].sc_5 );
break;
}
printf("\t \t是否继续?\n");
printf("\t \t是选1,否选2\n");
printf("***************************\n");
printf("\t \t");
scanf("%s",&cho);
}
fclose(fp);
}
部分代码
fopen里用ab+,二进制读和追加
你的id是char型的,但是输入的时候用的%d整数型,这样在写入文件时就转变成char了