声明:这些内容主要是面向C语言的初学者,尤其是正在学习C语言的学生。
switch语句可以用来在字符界面下制作菜单。给每个菜单项指定一个编号,用户通过输入编号来选择菜单项,switch语句判断用户输入的编号并执行相应的任务。下面我们通过一个例子来学习制作的过程。
例:编写一个简单程序对某门课的成绩进行统计分析,包括求平均成绩、找出最高成绩、统计不及格的人数和统计80分以上的人数。要求将这些功能制作成菜单项,用户可以随意选择。成绩存储在文件“grade.txt”中,每一行存储一个成绩。
分析:
定义四个函数分别实现四个功能,并对四个功能分别编号为1,2,3,4。用switch语句判断用户输入的编号,如果用户输入1,则调用求平均成绩的函数,…,输入4,则调用统计80分以上人数的函数。为了能让用户多次选择,加一个循环来重复操作直到用户不想继续为止。下面是详细的程序。
程序:
#include "stdio.h"
#include "stdlib.h"
#define NUMOFSTU 38
//print函数用于在显示菜单时,打印星号和空格。
void print(char c, int n)
{
int i;
for(i=1;i<=n;i++)
putchar(c);
}
//ave()函数用于求平均成绩
void ave()
{
int i;
float score,average,sum=0;
FILE*fp;
fp= fopen("grade.txt","r");
for(i=1;i<=NUMOFSTU;i++)
{
fscanf(fp,"%f",&score);
sum+= score;
}
average= sum/NUMOFSTU;
printf("\nTheaverage score is %.2f\n",average);
fclose(fp);
}
//max()函数用于找最高成绩
void max()
{
int i;
float score,max = -1;
FILE*fp;
fp= fopen("grade.txt","r");
for(i=1;i<=NUMOFSTU;i++)
{
fscanf(fp,"%f",&score);
if(score>max)
max= score;
}
printf("\nThemaximum score is %.2f\n",max);
fclose(fp);
}
//numOfFailing()函数用于统计不及格人数
void numOfFailing()
{
int i,count=0;
float score;
FILE*fp;
fp= fopen("grade.txt","r");
for(i=1;i<=NUMOFSTU;i++)
{
fscanf(fp,"%f",&score);
if(score<=60)
count++;
}
printf("\nThenumber of failing grade is %d\n",count);
fclose(fp);
}
//numOf80()函数用于统计80分以上人数
void numOf80()
{
int i,count=0;
float score;
FILE*fp;
fp= fopen("grade.txt","r");
for(i=1;i<=NUMOFSTU;i++)
{
fscanf(fp,"%f",&score);
if(score>=80)
count++;
}
printf("\nThenumber of grades greater than 80 is %d\n",count);
fclose(fp);
}
//显示菜单
void showMenu()
{
putchar('\n');
print(' ',10);
print('*',60);
putchar('\n');
print(' ',20);
printf("1--Calculate the average score\n");
print(' ',20);
printf("2--Find the maximum score\n");
print(' ',20);
printf("3--Count the number of failing grades\n");
print(' ',20);
printf("4--Count the number of grades greater than 80\n");
print(' ',20);
printf("5--Exit\n");
print(' ',10);
print('*',60);
putchar('\n');
}
int main()
{
int choice;
char ifcontinue;
showMenu();
//等待用户选择菜单项
while(1)
{
printf("\nPleaseselect menu item (key in 1-5): ");
scanf("%d",&choice);
//根据用户不同的选择,调用相应的函数
switch(choice)
{
case1: ave(); break;
case2: max(); break;
case3: numOfFailing(); break;
case4: numOf80(); break;
case5: exit(0);break;
default:printf("\nInvalid input!\n");
}
printf("\nIfyou want to continue, press y, otherwise, press any other key!");
getchar();
ifcontinue= getchar();
if(ifcontinue!='y')
break;
}
return 0;
}
图1显示了运行结果。首先显示菜单,并提示用户输入菜单项的编号,当用户选择了1以后,程序输出平均成绩。如果还想继续,可以输入字符’y’,用户可以选择其他操作。
图1. 运行结果