- 论坛徽章:
- 0
|
编译时卡在gets处,提示参数过多,如何修改通过编译,请各位高人帮帮看看。。谢谢了。- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <conio.h>
- #define STMAX 100 /*最大学生数*/
- struct student
- {
- char id[10];
- char name[20];
- char sex[10];
- float sorc[3];
- float aver;
- float sum;
- };
- FILE * fp=NULL;
- char filename[]="c:\\学生信息表.dat"; /*录入的学生信息所存储的文件*/
- /***************************函数声明**********************/
- void showmenu();
- void inputinfo(struct student*);
- void aboutinfo(struct student*);
- void allinfo(struct student*);
- void delinfo(struct student*);
- int existRec(struct student*);
- /**********主函数***********/
- int main(int argc, char *argv[])
- {
- struct student studentInfo[STMAX];
- struct student * p_student;
- int choice;
- p_student=studentInfo;
- /*********************显示菜单************************/
- showmenu(); /*显示系统菜单*/
- printf("\t\t 请选择操作:");
- /*********************输入选项********************/
- scanf("%d",&choice);
- /***************如果输入错误是否退出*************/
- while(choice!=5);
- {
- /********调用相应的功能*******/
- switch(choice)
- {
- case 1:inputinfo(p_student);break;
- case 2:aboutinfo(p_student);break;
- case 3:allinfo(p_student);break;
- case 4:delinfo(p_student);break;
- case 5:break;
- default:printf("\n\t\t\ 请重新选择(1~5):");
- scanf("%d",&choice);
- // continue;
- }
- showmenu();
- printf("\t\t 请选择操作:");
- scanf("%d",&choice);
- }
- printf("\n\n\t\t 退出系统");
-
- }
- /**************显示系统菜单******************/
- void showmenu()
- {
- system("cls"); //清屏
- printf("\n\n\n");
- printf("\t\t------------------------------------------------\n");
- printf("\t\t| 学生信息管理系统 |\n");
- printf("\t\t------------------------------------------------\n");
- printf("\t\t| 1. 录入信息 |\n");
- printf("\t\t| |\n");
- printf("\t\t| 2. 查询信息 |\n");
- printf("\t\t| |\n");
- printf("\t\t| 3. 浏览信息 |\n");
- printf("\t\t| |\n");
- printf("\t\t| 4. 删除信息 |\n");
- printf("\t\t| |\n");
- printf("\t\t| 5. 退出系统 |\n");
- printf("\t\t------------------------------------------------\n");
- //return();
- }
- /***********计算文件中现有的记录数****************/
- int existRec(struct student * p_student)
- {
- int count;
- system("cls");
- /*******打开文件***************/
- /*******是否出错***************/
- if((fp=fopen(filename,"rb"))==NULL)
- {
- /***************报告错误信息****/
- printf("不能打开文件,请确认磁盘未满或c:\\学生信息表.dat文件没有损坏");
- exit(0);
- }
- rewind(fp);
- /***********读入一条记录*************/
- /***********是否成功*****************/
- for(count=0;fread(&p_student[count],sizeof(struct student),1,fp)==1;count++);
- /***********关闭文件*******************/
- fclose(fp);
- return count;
- }
- /**********************信息录入*****************/
- void inputinfo(struct student *p_student)
- {
- int count,j;
- char ch;
- float sum;
- /*******************打开文件****************/
- count=existRec(p_student);
- /***************是否出错****************/
- if((fp=fopen(filename,"a+b"))==NULL)
- /********************报告错误***************/
- {
- printf("不能打开文件,请确认文件存在!");
- exit(0);
- }
- /**********************录入学生信息*******************/
- printf("\n\t 信息登记表\n");
- printf("\n请输入第%d个学生的信息(请使用英文或拼音)\n",count+1);
- printf("-----------------------------------------");
- printf("\n 学号:");
- fflush(stdin); /*清楚缓存,保证 scanf 输入正确*/
- /****************学号为0****************************/
- while(count<STMAX&&gets(p_student[count].id)!=NULL&&p_student[count].id[0]!='\0')
- {
- printf("\n学号");
- gets("%s",p_student[count].id);
- printf("\n姓名");
- gets("%s",p_student[count].name); /*
- *用gets时提示参数太多,只能接受一个输入参数
- *如何解决?问题点。
- */
- printf("\n性别");
- gets("%s",p_student[count].sex);
- printf("\n英语成绩:");
- gets("%f",&p_student[count].sorc[0]); //gets函数在接受非字符串时,必须用&符号
- printf("\n高数成绩:");
- gets("%f",&p_student[count].sorc[1]);
- printf("\n计算机成绩:");
- gets("%f",&p_student[count].sorc[2]);
- printf("----------------------------------\n");
- /***************************计算成绩*********************/
- sum=0;
- for(j=0;j<3;j++)
- sum=sum+p_student[count].sorc[j]; //计算总分 最好写成 sum+=p_student[count].sorc[j]
- p_student[count].sum=sum;
- p_student[count].aver=sum/3.0; //计算平均分
- /************************下面开始存入数据文件*************************/
- fwrite(&p_student[count++],sizeof(struct student),1,fp);
- printf("\n是否写入第%d个学生的信息(y/n)",count+1);
- ch=getch();
- if(ch=='y'||ch=='Y')
- {
- printf("%c\n--------------------------------",ch);
- printf("\n 学号:");
- fflush(stdin);
- continue;
- }
- else
- {
- fclose(fp);
- printf("%c\n\n 信息录入结束,按任意键返回!",ch);
- getch();
- //system("cls");
- return;
- }
- }
- fclose(fp);
- printf("\n输入有误,终止信息录入,按任意键返回!");
- getch();
- return;
- }
- /****************************查询个人信息******************************/
- void aboutinfo(struct student *p_student)
- {
- int i;
- int count;
- char ch;
- char * temp=NULL;
-
- count=existRec(p_student);
- if(!count)
- {
- printf("\n文件中记录为空!");
- getch();
- return;
- }
- temp=(char*)malloc(10*sizeof(char));
- printf("\n请输入要查询的学生学号:");
- fflush(stdin);
- while(gets(temp)!=NULL&&temp[0]!='\0')
- {
- for(i=0;i<count;i++)
- {
- if(!strcmp(temp,p_student[i].id))
- {
- printf("------------------------------\n");
- printf("姓名:%s\n",p_student[i].name);
- printf("\n性别:%s\n",p_student[i].sex);
- printf("\n英语:%.2f\n",p_student[i].sorc[0]);
- printf("\n高数:%.2f\n",p_student[i].sorc[1]);
- printf("\n计算机:%.2f\n",p_student[i].sorc[2]);
- printf("\n总分:%.2f\n",p_student[i].sum);
- printf("\n平均分:%2f\n",p_student[i].aver);
- printf("------------------------------\n");
- break;
- }
- }
- if(i==count)
- printf("\n没有该学生!\n",ch);
- printf("\n 查询下一个学生的信息?(y/n)");
- ch=getch();
- if(ch=='y'||ch=='Y')
- {
- printf("%c\n\n 请输入要查询的学生学号:",ch);
- fflush(stdin);
- continue;
- }
- else
- {
- free(temp);
- printf("%c\n\n 查询结束,返回!",ch);
- getch();
- return;
- }
- }
- free(temp);
- printf("\n 输入有误,按任意键返回菜单!");
- getch();
- return;
- }
- /*************查询所有信息*****************/
- void allinfo(struct student * p_student)
- {
- int i;
- int count;
- count=existRec(p_student);
- if(!count)
- {
- printf("\n\n 文件记录为空!");
- getch();
- return;
- }
- printf("\n\t\t\t 学生信息查询表\n\n");
- printf("\t 以下是本系统所查询到的所有学生信息,如果表中数据为空\n");
- printf("\t 请确认数据是否成功录入!\n");
- printf("\n----------------------------------------------------");
- for(i=0;i<count;i++)
- {
- printf("\n 您正查看第[%d]个学生的信息\n",i+1);
- printf("\n学 号:%s\n",p_student[i].id);
- printf("\n姓 名:%s\n",p_student[i].name);
- printf("\n性 别:%s\n",p_student[i].sex);
- printf("\n英 语:%.2f\n",p_student[i].sorc[0]);
- printf("\n高 数:%.2f\n",p_student[i].sorc[1]);
- printf("\n计算机:%.2f\n",p_student[i].sorc[2]);
- printf("\n总 分:%.2f\n",p_student[i].sum);
- printf("\n平均分:%2f\n",p_student[i].aver);
- printf("------------------------------\n");
- printf("按任意键继续浏览……!");
- getch();
- }
- printf("\n\n 查询结束,按任意键返回!");
- getch();
- return;
- }
- /****************删除信息*********************/
- void delinfo(struct student * p_student)
- {
- int i,j;
- int count;
- char ch;
- char* temp=NULL;
- count=existRec(p_student);
- if(!count)
- {
- printf("\n 不能读取数据,请确认已经正确录入或数据是否存在");
- getch();
- return;
- }
- temp=(char*)malloc(10*sizeof(char));
- printf("\n 请输入要删除的学生学号:");
- fflush(stdin);
-
- while(gets(temp)!=NULL&&temp[0]!='\0')
- {
- for(i=0;i<count;i++)
- {
- if(!strcmp(temp,p_student[i].id))
- {
- printf("\n\n 确定要删除%s的信息吗? (y/n)",p_student[i].id);
- ch=getch();
- if(ch=='n'||ch=='N')
- {
- free(temp);
- printf("%c\n\n 该操作被取消,请按任意键返回!",ch);
- getch();
- return;
- }
- for(j=i;j<count;j++)
- p_student[j]=p_student[j+1]; //从数组中删除指定学生
- count--;
- if((fp=fopen(filename,"w+b"))==NULL)
- {
- free(temp);
- printf("\n不能打开文件,请确认磁盘已满或文件是否存在");
- getch();
- exit(1);
- }
- for(j=0;j<count;j++)
- {
- if(fwrite(&p_student[j],sizeof(struct student),1,fp)!=1)
- break;
- }
- fclose(fp);
- }
- }
- if(i==count)
- printf("\n\n没有该学生!\n",ch);
- else
- printf("%c\n\n\n 已成功删除该学生的信息……\n",ch);
- printf("\n删除下一个学生信息 (y/n)");
- ch=getch();
- if(ch=='y'||ch=='Y')
- {
- printf("%c\n\n 请输入你要删除的学生学号:",ch);
- fflush(stdin);
- continue;
- }
- else
- {
- free(temp);
- printf("%c\n\n 删除结束,按任意键返回!",ch);
- getch();
- return;
- }
- }
- free(temp);
- printf("\n 输入有误, 请按任意键返回菜单,重新选择!");
- getch();
- return;
- }
复制代码 |
|