为什么main()里面的判断进不去
我自己试着编写一个简单的学生成绩查询系统。现在main()函数里面的判断进不去。
进去了,5、6、7、8进去也会闪退。
哪位有空能帮我找一下原因吗?
你判断的地方getchar()=="A"用了双引号,应该用单引号,建议改成这样
char c = getchar();
if (c == 'A'||c == 'a')
然后下面的else if(c=='B'||C=='b')
这样比较合理点,判断到其他字符可以让使用者从新输入,这样比较合理 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*定义学生结构*/
struct Student
{
char ID; //学号
char NAME; //姓名
//语文、数学、英语 成绩
float C_Score;
float M_Score;
float E_Score;
float CME_Score; //总分数
};
/*声明学生数组和数量*/
struct Student Students;
int num = 0;
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
{
int i, r ;
r = -1 ;
for (i = 0 ; i < num ; i ++) {
if (! strcmp(Students.ID, id)) {
r = i ;
break ;
}
}
return r ;
}
/*通过姓名返回数组下标*/
int Student_SearchByName(char name[])
{
int j , r ;
r = -1 ;
for (j = 0 ; j < num ; j ++) {
if (! strcmp(Students.NAME , name)) {
r = j ;
break ;
}
}
return r ;
}
/*显示单条学生信息*/
void Student_DisplaySingle_Score(int index)
{
if(num > 0) {
if(index >= 0 && index <= num - 1) {
printf("学号:%10s\n", Students.ID) ;
printf("姓名:%10s\n", Students.NAME) ;
printf("语文成绩:%4f\n", Students.C_Score) ;
printf("数学成绩:%4f\n", Students.M_Score) ;
printf("英语成绩:%4f\n", Students.E_Score) ;
printf("成绩总和:%4f\n", Students.CME_Score);
printf("-----------------------------------------\n") ;
} else {
printf("序号越界!\n") ;
}
} else {
printf("空数据表!\n") ;
}
}
/***新增学生记录***/
void Student_Insert()
{
char c ;
while (1) {
printf("请输入该学生学号:") ;
scanf("%s", &Students.ID) ;
printf("请输入该学生姓名:") ;
scanf("%s", &Students.NAME) ;
printf("请输入该学生语文成绩:") ;
scanf("%f", &Students.C_Score) ;
printf("请输入该学生数学成绩:") ;
scanf("%f", &Students.M_Score) ;
printf("请输入该学生英语成绩:") ;
scanf("%f", &Students.E_Score) ;
printf("该学生总成绩为:") ;
scanf("%f", &Students.CME_Score) ;
fflush(stdin) ;
num ++ ;
printf("是否继续?(Y/N),继续请按任意键,否则输入N:") ;
c = getchar() ;
if (c == 'N' || c == 'n') break ;
}
}
/***修改学生信息***/
void Student_Modify()
{
char id , c ;
int index ;
if(num > 0) {
while (1) {
printf("请输入学生学号:") ;
scanf("%s" , & id) ;
fflush(stdin) ;
index = Student_SearchByIndex(id) ;
if (index == -1) printf("该学生不存在!") ;
else {
printf("您要修改的学生信息为:") ;
Student_DisplaySingle_Score(index) ;
printf("---请输入新值---") ;
printf("请输入该学生学号:") ;
scanf("%s", Students.ID) ;
printf("请输入该学生姓名:") ;
scanf("%s", Students.NAME) ;
printf("请输入该学生语文成绩:") ;
scanf("%f", Students.C_Score) ;
printf("请输入该学生数学成绩:") ;
scanf("%f", Students.M_Score) ;
printf("请输入该学生英语成绩:") ;
scanf("%f", Students.E_Score) ;
fflush(stdin) ;
printf("是否继续?(Y/N),继续请按任意键,否则输入N:") ;
c = getchar() ;
if (c == 'N' || c == 'n') break ;
}
}
} else {
printf("空数据表!\n") ;
}
}
/***del学生信息***/
void Student_Delete()
{
int i , j , index ;
char id , name , c ;
if(num > 0) {
while (1) {
printf("请输入学生学号:") ;
scanf("%s" , & id) ;
fflush(stdin) ;
index = Student_SearchByIndex(id) ;
if (index == -1) printf("该学生不存在!") ;
else {
printf("您要删除的学生信息为:") ;
Student_DisplaySingle_Score(index) ;
printf("是否真的要删除?(Y/N)") ;
c = getchar() ;
if (c == 'Y' || c == 'y') {
if (index < num - 1) {
for (i = index ; i < num ; i ++) Students = Students ;
}
num -- ;
}
printf("删除成功。") ;
}
printf("是否继续?(Y/N),继续请按任意键,否则输入 N:") ;
c = getchar() ;
if (c == 'N' || c == 'n') break ;
}
} else {
printf("空数据表!\n") ;
}
}
/***查询学生信息***/
void Student_Select()
{
int index ;
char id , c ;
if(num > 0) {
while (1) {
printf("请输入查询学生的学号:") ;
scanf("%s", id) ;
fflush(stdin) ;
index = Student_SearchByIndex(id) ;
if (index == -1) printf("该学生不存在!");
else {
printf("你需要查询的信息为:") ;
Student_DisplaySingle_Score(index) ;
}
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
c = getchar() ;
if (c == 'N' || c== 'n') break ;
}
} else {
printf("空数据表!\n") ;
}
}
/***单个成绩排序***/
/**---C---**/
void Student_Sort_C()
{
int i , j ;
struct Student tmp ;
for (i = 1 ; i < num ; i ++) {
j = i ;
while (j > 0) {
if (Students . C_Score < Students . C_Score) {
tmp = Students ;
Students = Students ;
Students = tmp ;
j -- ;
} else break ;
}
}
}
/**---M---**/
void Student_Sort_M()
{
int i , j ;
struct Student tmp ;
for (i = 1 ; i < num ; i ++) {
j = i ;
while(j > 0) {
if (Students . M_Score < Students . M_Score) {
tmp = Students ;
Students = Students ;
Students = tmp ;
j -- ;
} else break ;
}
}
}
/**---E---**/
void Student_Sort_E()
{
int i , j ;
struct Student tmp ;
for (i = 1 ; i < num ; i ++) {
j = i ;
while(j > 0) {
if (Students . E_Score < Students . E_Score) {
tmp = Students ;
Students = Students ;
Students = tmp ;
j -- ;
} else break ;
}
}
}
/**总成绩排序**/
void Student_Sort_CME()
{
inti , j ;
struct Student tmp ;
for (i = 1 ; i < num ; i ++) {
j = i ;
while (j > 0) {
if (Students . CME_Score < Students . CME_Score) {
tmp = Students ;
Students = Students ;
Students = tmp ;
j -- ;
} else break ;
}
}
}
/***显示所有学生信息***/
void Student_display()
{
int i ;
for (i = 0 ; i < num ; i ++) {
Student_DisplaySingle_Score(i) ;
printf("-----------------------------------------\n") ;
}
}
/***从文件Student_info.txt中读取学生信息***/
Read_Student_info()
{
FILE * fp ;
int i , r ;
r = -1 ;
if ((fp = fopen("Student_info.txt", "rb")) != NULL) {
if (fread(& num , sizeof(int) , 1 , fp) == 1) {
for (i = 0 ; i < num ; i ++) fread(& Students , sizeof(struct Student) , 1 , fp);
r = 0 ;
} else fprintf(stderr , "文件读取错误!\n") ;
fclose(fp) ;
} else fprintf(stderr , "不能打开文件!\n") ;
return r ;
}
/****将学生信息写入Student_info.txt文件中****/
Write_Student_info()
{
FILE * fp ;
int i , r ;
r = -1 ;
if ((fp = fopen("Student_info.txt", "wb")) != NULL) {
if (fwrite(& num , sizeof(int) , 1 , fp) == 1) {
for (i = 0; i < num; i ++) fwrite(&Students , sizeof(struct Student) , 1 , fp) ;
r = 0 ;
} else fprintf(stderr , "文件写入错误!\n") ;
fclose(fp) ;
} else fprintf(stderr , "不能打开文件!\n") ;
return r ;
}
main(void)
{
int chile ;
float fute ;
Read_Student_info() ;
char c ;
bool f ;
f = true ;
printf("请选择当前的职业(A:老师B:学生):") ;
c = getchar() ;
if (c == 'A' || c == 'a') {
while(f) {
printf("*************学生成绩管理系统************\n");
printf(" 1.新增学生记录.\n") ;
printf(" 2.修改学生记录.\n") ;
printf(" 3.删除学生记录.\n") ;
printf(" 4.查询学生记录.\n") ;
printf(" 5.按语文成绩排序.\n") ;
printf(" 6.按数学成绩排序.\n") ;
printf(" 7.按英语成绩排序.\n") ;
printf(" 8.按三科总分成绩排序.\n") ;
printf(" 9.显示所有学生信息.\n") ;
printf("10.退出.\n") ;
printf("请选择(1~10):") ;
scanf("%d", & chile) ;
fflush(stdin) ;
switch (chile) {
case 1:
Student_Insert() ;
break ;
case 2:
Student_Modify() ;
break ;
case 3:
Student_Delete() ;
break ;
case 4:
Student_Select() ;
break ;
case 5:
Student_Sort_C() ;
break ;
case 6:
Student_Sort_M() ;
break ;
case 7:
Student_Sort_E() ;
break ;
case 8:
Student_Sort_CME() ;
break ;
case 9:
Student_display() ;
break ;
case 10:
f = false ;
break ;
}
Write_Student_info() ;
}
} else Student_Select() ;
}
jackz007 发表于 2019-3-5 18:48
?哪里修改了,能指出来吗?
页:
[1]