在编写input函数读入学生信息时,循环输入出现问题,程序自动跳过判断步骤,直接进入下一个循环,不知道怎么解决。代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define FORM "%-11d%-5s%-5s%-5d%-12d%-12d%-12d%-12d%-12.2lf\n"
#define DATA st[i].id,st[i].name,st[i].gender,st[i].age,st[i].MathAna,st[i].LiAlg,st[i].Computer,st[i].English,st[i].GPA
struct Student{ //设置结构体变量,储存学生信息
int id; //学号
char name[10]; //姓名
char gender[10]; //性别
int age; //年龄
int MathAna; //数学分析成绩
int LiAlg; //高等代数成绩
int Computer; //程序设计成绩
int English; //大学英语成绩
double GPA; //平均学分绩GPA
};
struct Student st[100];
void menu(); //菜单
void count();
void input(); //输入学生信息
int main()
{
int n;
menu(); //调用菜单函数,显示菜单界面
scanf("%d",&n); //输入数字,进入不同功能
while(n)
{
switch(n){
case 1: input(); break;
default: break;
}
}
}
void menu() //该函数用于实现菜单界面
{
printf("\n\n\n\n");
printf("\t\t|***************学生信息管理系统***************|\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|\t\t 1.输入学生信息\t |\n");
printf("\t\t|\t\t 2.修改学生信息\t |\n");
printf("\t\t|\t\t 3.查询学生信息\t |\n");
printf("\t\t|\t\t 4.按GPA排序\t |\n");
printf("\t\t|\t\t 5.按性别统计\t |\n");
printf("\t\t|\t\t 6.按年龄统计\t |\n");
printf("\t\t|\t\t 7.显示挂科学生信息\t |\n");
printf("\t\t|\t\t 8.显示所有学生信息\t |\n");
printf("\t\t|\t\t 9.删除学生信息\t |\n");
printf("\t\t|\t\t 0.退出系统\t\t |\n");
printf("\t\t|\t\t\t\t\t |\n");
printf("\t\t|**********************************************|\n\n");
printf("请您选择操作(0-9):");
}
void count()
{
struct Student stu1;
FILE * fp; //定义一个文件指针fp
fp = fopen("students.txt", "at+"); //以"追加"方式打开students文本文件
if (fp == NULL) //判断文件是否为空
printf("Cannot open file!");
int n = 0; //初始化
while (1)
{
if (feof(fp)) //检测文件是否结束
break;
fread( & stu1, sizeof(struct Student), 1, fp); //读取文件
n++; //读取文件数
}
n--; //关闭文件数
fclose(fp); //关闭文件
}
void input()
{
int n = 0;
int i = 0; //学生人数初始化//
char c;
FILE * fp; //定义一个文件指针fp//
count(); //实时检测总数n//
fp = fopen("students.txt", "at+"); //以"追加"方式打开students文本文件
do
{
printf("请输入学生的个人信息:\n");
printf("\n请输入第%d位学生的信息:\n", n + 1);
printf("请输入学生的学号:");
scanf("%d", &st[i].id);
printf("请输入学生的姓名:");
scanf("%s", st[i].name);
printf("请输入学生的性别:");
scanf("%s",st[i].gender);
printf("请输入学生的年龄:");
scanf("%d",&st[i].age);
printf("请输入学生的数学分析成绩:");
scanf("%d", &st[i].MathAna);
printf("请输入学生的高等代数成绩:");
scanf("%d", &st[i].LiAlg);
printf("请输入学生的程序设计成绩:");
scanf("%d",&st[i].Computer);
printf("请输入学生的大学英语成绩:");
scanf("%d", &st[i].English);
printf("请输入学生的GPA:");
scanf("%.2lf",&st[i].GPA);
fwrite( & st[i], sizeof(struct Student), 1, fp); //以方式将其写入students文本文件
i++;
n++;
printf("\n\n\t\t\t\t是否继续输入(Y/N):");
getchar(); //提示是否继续,从键盘获得一个字符
scanf("%c", &c);
}
while ( c == 'y' || c == 'Y');
fclose(fp);
}
运行结果如下图: