题目:
从外界获取宿舍里面各个成员的名字并且存储成数组,然后从外界获取星期几来输出今天谁值日,本题目至少使用一个以上的函数(不包括main函数),并且函数具备参数。
解答:
1、姓名存储
此前我们写过了存储当个用户姓名的方式:
char userName[50]="刘日辉";
那么存储多个人的姓名,并且采用数组的方式(当然,先这种存储方式会造成很多一维数组的元素是空字符,有点浪费内存,后续我们会讲到指针数组的方式就高效多),按学校的宿舍是6人间来算,那么就是2维数组:
char userNames[6][50]={"张三","李四","王五","黎明","刘德华","马云"}
当然,题目要求是从外界获取的,就需要使用scanf,单个获取是:
scanf("%s",userNames[i]);//注意这里只是一个中括号,代表的是二维的维度,也就是一行。不需要写代表列的中括号
如果要输出所有的,则可以为:
for(i=0;i<6;i++)
{
printf("%s\n",userNames[i]);//注意只需要写代表行的中括号就可以了
}
2、谁值日
这个只需要进行判断就可以了,如果用户输入的是整数1-7,则为:
int weekday;
scanf("%d",&weekday);
switch(weekday)
{
case 1:printf("今天%s值日!",userNames[weekday-1]);break;
case 2:printf("今天%s值日!",userNames[weekday-1]);break;
case 3:printf("今天%s值日!",userNames[weekday-1]);break;
case 4:printf("今天%s值日!",userNames[weekday-1]);break;
case 5:printf("今天%s值日!",userNames[weekday-1]);break;
case 6:printf("今天%s值日!",userNames[weekday-1]);break;
default:printf("今天没人值日或您输入的数字错误!");
}
3、函数
题目要求至少使用一个以上的函数,并且函数包含参数。
要重构代码,提取出函数,我们首先看下:
(1)程序里面有重复的代码,重复的代码可以提炼成一个函数,比如在今天谁值日的printf()代码都是重复的。
(2)程序里面可独立的功能,可以将功能独立成一个函数,比如判断今天谁值日的代码。
4、代码
4.1没有独立的函数
4.2需要独立函数
把之前的分支判断这个功能独立成一个函数,并且把打印谁值日这个重复的语句独立成一个函数。
注意上面这里一定要把char userNames[][]放main函数外面,因为任何变量都有一个作用域(就是起作用的范围),作用域一般是所在的大括号,如果userNames写在main函数里面则其他函数是无法使用的,除非也通过参数传递过去。否则会报错提示未定义,如下:
5、最终效果