帮忙看一下错在哪里?输入后只能存一组数据,而且也读不出??
#include<stdio.h> #include<string.h>
#define N 100
struct stu{
char num[10];
char name[10];
char qq[10];
char sex[10];
char day[10];
}stu[50];
int m=1;
void input()
{ FILE *fp;
int i;
void menu();
printf("输入待录入的学生数:");
scanf("%d",&m);
while(m>N)
{
printf("个数太多,重新输入,推出请输入\n");
scanf("%d",&m);
if(m==0)
void menu();
}
printf("输入学生信息(学号 姓名 qq 性别 出生年月)\n");
if((fp=fopen("a.txt","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0;i<m;i++)
{
printf("请输入学号:");
scanf("%s",&stu[i].num);
printf("请输入名字:");
scanf("%s",&stu[i].name);
printf("请输入qq号:");
scanf("%s",&stu[i].qq);
printf("请输入性别:");
scanf("%s",&stu[i].sex);
printf("请输入出生年月:");
scanf("%s",&stu[i].day);
fwrite(&stu,sizeof(stu[i]),1,fp);
fclose(fp);
}
printf("输入完毕\n");
menu();
}
void del()
{
int i,j;
char ch;
char snum[10];
printf("请输入学号:");
scanf("%s",snum);
for(i=0;i<m;i++)
if(strcmp(snum,stu[i].num)==0)
break;
printf("学号 姓名\n");
printf("%-10s %-10s",stu[i].num,stu[i].name);
printf("找到这个学生,确定删除?(y/n)");
scanf("%c\n",&ch);scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{ for(j=i;j<m;j++)
stu[j]=stu[j+1];
m--;
FILE *fp;
if((fp=fopen("a.txt","w"))==NULL)
{
printf("cannot open file\n");
return;
}
fwrite(&stu,sizeof(stu[i]),1,fp);
fclose(fp);
printf("删除成功!\n");
}
else
{
return;
}
}
void print()
{
int i;
void menu();
FILE *fp;
if((fp=fopen("a.txt","r"))==NULL)
{
printf("cannot open file\n");
return;
}
printf("学号 姓名 qq 性别 出生年月\n");
for(i=0;i<m;i++)
{
fread(&stu[i],sizeof(struct stu),1,fp);
printf("%-8s%-8s%-8s%-8s%-8s\n",stu[i].num,stu[i].name,stu[i].qq,stu[i].sex,stu[i].day);
}
fclose(fp);
menu();
}
void shut()
{
printf("谢谢使用本系统。");
}
void menu()
{
int key;
printf("\n*****学生信息管理系统*****\n");
printf("----------------------------------\n");
printf("1. 录入学生信息\n");
printf("2. 按学号删除信息\n");
printf("3. 显示学生信息\n");
printf("4. 退出系统\n");
printf("请输入key;");
scanf("%d",&key);
switch(key)
{
case(1):
input();
break;
case(2):
del();
break;
case(3):
print();
break;
case(4):
shut();
break;
default :
printf("你输入有误。");
break;
}
}
void main()
{
menu();
}