【C的一道题】关于成绩管理系统的输入名字一点小问题,求解答。。
struct student
{
int number; //学号
float score[3]; //分数
char name[100]; //名字,这么长的名字,有点多了吧?
};
void input(struct student *parr,int len) //函数功能:手动输入学生信息或者选择读取文件
{
char ch;
printf("请选择你要录入学生信息的方式:1、手动输入 2、读取磁盘文件\n");
getchar(); //这个getchar()是干嘛的,等待键盘输入的方式选项?如果是为什么没有赋给ch
scanf("%c",&ch);//这个是吃掉输入流中的'\n'换行符?还是,这才是等待键盘输入?
//不管这个scanf是做什么用的,他都需要等待键盘输入 + Enter
//而这个Enter会作为换行符留在输入流中,如果刚好选择的是手动输入'1'
//则这个换行符直接遇到了scanf("%s",parr[i].name);,这又使
//scanf字符串返回,parr[0].name为空
switch(ch)
{
case '1':
int i;
FILE *fp;
fp=fopen("D:\\student.dat","w");//fopen("", "w")本身就会在没有则个文件的时候
//创建一个新文件,并返回对应的文件结构指针
//下面再一次fopen("", "w")是干嘛?
if((fopen("D:\\student.dat","w"))==NULL)
{
printf("创建文件失败,请重新创建!");
exit(0);
}
printf("已创建成功!\n");
for(i=0;i<len;i++){
printf("请输入第%d个学生信息:\n",i+1);
printf("姓名:");
scanf("%s",parr[i].name); //这里建议写作scanf(" %s",parr[i].name);
printf("学号:");
scanf("%d",&parr[i].number);
printf("高等数学成绩:");
scanf("%f",&parr[i].score[0]);
printf("课程设计成绩:");
scanf("%f",&parr[i].score[1]);
printf("大学英语成绩:");
scanf("%f",&parr[i].score[2]);
fwrite(&parr[i],sizeof(struct student),1,fp);
}
printf("文件已保存!");
fclose(fp);
case'2':