2 qq 37362700 qq_37362700 于 2017.06.19 09:06 提问

c语言简单学生查询问题

输入q类型不一样,出问题

#include <stdio.h>
#include <string.h>
#define NUMBER 5 //学生人数

//1).编写函数average,对n个学生的成绩score,计算平均分数,并返回其值。
 int arevage(int score[])
 {
    int total=0;
    int i=0;
    for (i=0;i<NUMBER;i++)
    {
        total+=score[i]; //总学生成绩
    }
    return total/NUMBER;  //得出平均值

 }
//2).编写函数grade,对n个学生的成绩score,分别统计及格人数c1和不及格的人数c2,并输出。
 int grade(int score[])
 {
     int c1=0;//及格人数
     int c2=0;//不及格人数
     int i=0;
     for (i=0;i<NUMBER;i++)
     {
         if(score[i]>60)
             c1++;
         else
            c2++;
     }
     printf ("及格人数为:   %d 人\n",c1);
     printf ("不及格人数为: %d 人\n",c2);
 }
//3).编写函数max,求n个学生的成绩score的最高分,并返回其值。
 int max(int score[])
 {
     int i=0,j=0;
     int _max=0;
     for (i=0;i<NUMBER-1;i++)
     {
         for(j=i+1;j<NUMBER;j++)
         {
             if(score[i]>score[j])
             {
                 _max=score[i];
                 score[i]=score[j];
                 score[j]=_max;
             }
         }
     }
     return score[i];
 }
//4)、编写函数xx,对n个学生的成绩score进行排序,并输出。
 int xx(int score[])
 {
     int i=0,j=0;
     int _max=0;
     for (i=0;i<NUMBER-1;i++)
     {
         for(j=i+1;j<NUMBER;j++)
         {
             if(score[i]>score[j])
             {
                 _max=score[i];
                 score[i]=score[j];
                 score[j]=_max;
             }
         }
     }
     return 0;
 }

/*5.)编写主函数main,通过键盘输入用户的选择步骤完成相应功能,用户输入1时调用average统计平均分,输入2时调用grade统计及格或不及格人数,输入3时调用max找最大值,输入4时调用xx对成绩排序,输入0时返回。
 程序要求:合适繁荣提示语 */
 int menu(int _getNumber)
 {
     int new;
     int i=(int)_getNumber;
     int studentScore[NUMBER]={10,70,61,90,100};
     if(i=='q'||i=='Q')
     {
         exit(1);
     }
     while(i!=1&&i!=2&&i!=3&&i!=4)
     {

         printf ("$error :输入有误请重新输入!\a\n");
         scanf("%d",&i);
         printf ("hello word !\n");
         //scanf("%d",&i);



     }
     while(i==1||i==2||i==3||i==4)
     {
     //计算机平均分
     if (i==1)
     {
         printf ("平均成绩是:%d\n",arevage(studentScore));
         //continue;
     }
     //统计合格与不合格的人数
     if (i==2)
     {
         grade(studentScore);
         //continue;
     }
     //最高成绩
     if (i==3)
     {
         printf ("最高的成绩为: %d\n",max(studentScore));

     }
     //从小到大排序
     if (i==4)
     {
         xx(studentScore);
         for (i=0;i<NUMBER;i++)
         {
         printf ("从小到大排序后为:sutdent[%d] = %d\n",i,studentScore[i]);
         }
     }

     printf ("$请再输入查询代号:");
     scanf("%d",&i);
     if(i!=1&&i!=2&&i!=3&&i!=4)
     {

         printf ("$error :输入有误请重新输入!\a\n");
         if(scanf("%d",&i));

     }
     if(i=='q'&&i=='Q')
     {
         break;
     }
     //printf("i = %d",i);
     if(i!=1&&i!=2&&i!=3&&i!=4)
     {

         printf ("$error :输入有误请重新输入!\a\n");
         scanf("%d",&i);

     }


     }
 }
 int main(int argc,char *argv[])
 {
     int getNumber=0;
     printf ("***************************************************\n\n");
     printf (" 输入 【1】————————统计学生成绩\n");
     printf (" 输入 【2】————————分别统计学生成绩及格人数和不及格的人数\n ");
     printf ("输入 【3】————————统计学生的最高成绩\n ");
     printf ("输入 【4】————————对学生成绩进行排序\n ");
     printf ("输入 【q】或者【Q】————————退出程序\n ");
     printf ("$你输入查询代号:");
     scanf("%d",&getNumber);
     menu(getNumber);
     return 0;
 }


主要是:让用户输入q,或者Q退出程序,输入1-4,输入其他报错,让用户重新输入

我调试了下是,当输入英文时,但scanf要求输入 整数类型,类型不一,里面的值不是本身的值,如何解决这个问题?

3个回答

shenshucong520
shenshucong520   2017.06.19 09:05

scanf不用接受整形吗,接受字符,1,2,3,4也作为字符判断就好了

shenshucong520
shenshucong520 回复qq_37362700: 判断你输入的字符是q就退出啊
大约 2 个月之前 回复
qq_37362700
qq_37362700 但我要求 输入q退出程序
大约 2 个月之前 回复
qq_29196023
qq_29196023   2017.06.19 09:45

scanf("%s",&getNumber);
用字符输入,根据字符来判断就可以了

qq_37362700
qq_37362700 哦,但是循环那还有点问题
大约 2 个月之前 回复
shen_wei
shen_wei   Ds   Rxr 2017.06.19 15:23
char getchar;
while(1)
{
        scanf("%c",&getchar);
        if( getchar == 'q' || getchar =='Q')
        {
            exit(0);
        }
        else
        {
        menu(getchar);
            }
    }

    这里修改成字符接受就可以。。

qq_37362700
qq_37362700 谢谢
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片