黑马程序员技术交流社区
标题:
学生信息系统中两个scanf函数
[打印本页]
作者:
余武超
时间:
2014-6-1 13:31
标题:
学生信息系统中两个scanf函数
本帖最后由 余武超 于 2014-6-1 19:40 编辑
因为参加基础测试题,其中的一道编程题是学生信息管理的编程题,在网上看到了这个源代码。其中增加学生信息时有两个一样的scanf()函数。
复制代码
作者:
余武超
时间:
2014-6-1 13:34
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
jiemian();
struct student
{
char name[50];
char sex[5];
int age;
char num[50];
float score1;
float score2;
float score3;
float sum;
float ave;
}stu[50],del;
void gn1()
{
int i=0;
char num1;
for(i=0;i<50;i++)
{
printf("请输入要添加的学生资料:\n");
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
printf("性别:");
scanf("%s",&stu[i].sex);
printf("年龄:");
scanf("%d",&stu[i].age);
printf("请输入学生的三门成绩:\n");
printf("语文:");
scanf("%f",&stu[i].score1);
printf("数学:");
scanf("%f",&stu[i].score2);
printf("英语:");
scanf("%f",&stu[i].score3);
printf("是否继续添加:y/n\n");
scanf("%c",&num1);//
scanf("%c",&num1);
if(num1=='N' || num1=='n')
{
system("cls");
jiemian();
}
}
}
void gn2()
{
int i;
char num[50];
printf("请输入要查找的学生学号:\n");
scanf("%s",num);
for(i=0;i<50;i++)
if(strcmp(stu[i].num,num)==0)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);
break;
}
if(i==50)
printf("查找不到!请重新输入!\n");
getch();
system("cls");
jiemian();
}
void gn3()
{
char num1,i=0;
printf("请输入要修改的学生学号:\n");
scanf("%s",stu[i].num);
printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);
printf("姓名:");
scanf("%s",stu[i].name);
printf("性别:");
scanf("%s",stu[i].sex);
printf("年龄:");
scanf("%d",&stu[i].age);
printf("请输入学生的三门成绩:\n");
printf("语文:");
scanf("%f",&stu[i].score1);
printf("数学:");
scanf("%f",&stu[i].score2);
printf("英语:");
scanf("%f",&stu[i].score3);
printf("是否继续修改:y/n?\n");
scanf("%c",&num1);
scanf("%c",&num1);
if(num1=='N' || num1=='n')
system("cls");
jiemian();
}
void gn4()
{
int i;
char num[50];
printf("请输入要删除的学生学号:\n");
scanf("%s",num);
for(i=0;i<50;i++)
if(strcmp(num,stu[i].num)==0)
{
printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);
stu[i]=del;
printf("信息已删除,按任意键返回..\n");
break;
}
if(i==50)
printf("您输入的信息不存在!\n");
getch();
system("cls");
jiemian();
}
void gn5()
{
int i=0;
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
printf("学号 \t姓名 \t性别 \t年龄 \t语文 \t数学 \t英语 \t总成绩 \t 平均成绩 \n");
for(i=0;i<50;i++)
{
if(stu[i].age==0)
break;
printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);
}
printf("按任意键返回...");
getch();
system("cls");
jiemian();
}
void gn6()
{
FILE *fp;
int i;
char filename[50];
printf("\n");
printf("\n");
printf("请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
printf("文件名为空,不能保存!\n");
for(i=0;i<50;i++)
{
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("文件保存失败!\n");
}
fclose(fp);
printf("文件已保存!\n");
printf("按任意键返回...\n");
getch();
system("cls");
jiemian();
}
void gn7()
{
FILE *fp;
int i=0; //打开文件流
char filename[50];
printf("请输入文件名:");
scanf("%s",filename); //输入要载入的文件名
if((fp=fopen(filename,"rb"))==0) //如果当前目录下不存在相对应的文件,输出文件不存在,退出系统。
{
printf("文件不存在!\n");
exit(0);
}
while(fread(&stu[i],sizeof(struct student),1,fp)!=0)//若存在,读取系统
{
i++;
}
fclose(fp); //程序结束后,关闭流。
printf("信息已载入!\n");
printf("按回车键返回 ");
getchar();
getchar();
system("cls");
jiemian();
}
void gn8()
{
printf("按任意键退出...");
exit(0);
}
void xuanze()
{
int num;
scanf("%d",&num);
switch(num)
{
case 1:system("cls");gn1();break;
case 2:system("cls");gn2();break;
case 3:system("cls");gn3();break;
case 4:system("cls");gn4();break;
case 5:system("cls");gn5();break;
case 6:system("cls");gn6();break;
case 7:system("cls");gn7();break;
case 8:system("cls");gn8();break;
default:printf(" ");break;
}
}
jiemian()
{
printf("\t\t*****************学生档案管理系统*************\n");
printf("\t\t1>添加学生信息");
printf("\t\t\t2>查找学生信息\n");
printf("\t\t3>修改学生信息");
printf("\t\t\t4>删除学生信息\n");
printf("\t\t5>显示学生信息");
printf("\t\t\t6>保存学生信息\n");
printf("\t\t7>载入学生信息");
printf("\t\t\t8>退出系统\n");
printf("\t\t**********************************************\n");
printf("请从1-8中选择您的操作:\n");
xuanze();
}
void main()
{
jiemian();
}
复制代码
作者:
余武超
时间:
2014-6-1 13:36
在103、104行有两个一样的scanf()函数,为什么一个scanf()就不能正常运行
作者:
夏沫的黄昏′
时间:
2014-6-1 17:30
一个scanf完全可以的,
因为第一个scanf是不读你输入的 数据的
你改成getchar也可以
原因是 源自于C语言字符读取的一个蛋疼问题
因为读取字符的时候 会有一个缓冲区
:Q实在是难以解释C语言读字符 的一堆问题
我一直把它当成了C语言的BUG。。 我把常见的字符问题都做了处理 。。基本上不出错
作者:
余武超
时间:
2014-6-1 19:40
夏沫的黄昏′ 发表于 2014-6-1 17:30
一个scanf完全可以的,
因为第一个scanf是不读你输入的 数据的
你改成getchar也可以
谢谢你的解答~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2