ZZQIANG 发表于 2019-3-5 14:39:28

为什么main()里面的判断进不去

我自己试着编写一个简单的学生成绩查询系统。
现在main()函数里面的判断进不去。
进去了,5、6、7、8进去也会闪退。
哪位有空能帮我找一下原因吗?

暗pluto 发表于 2019-3-5 15:45:12

你判断的地方getchar()=="A"用了双引号,应该用单引号,建议改成这样
char c = getchar();
        if (c == 'A'||c == 'a')
然后下面的else if(c=='B'||C=='b')
这样比较合理点,判断到其他字符可以让使用者从新输入,这样比较合理

jackz007 发表于 2019-3-5 18:48:30

#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()                                       ;
}

ZZQIANG 发表于 2019-3-6 09:55:59

jackz007 发表于 2019-3-5 18:48


?哪里修改了,能指出来吗?
页: [1]
查看完整版本: 为什么main()里面的判断进不去