05-函数参数
9.1.3 函数参数
在程序清单9.1的输出中,如果文字能居中,信头会更加美观。可以通过在打印文字之前打印一定数量的空格来实现,这和打印一定数量的星号( starbar() 函数)类似,只不过现在要打印的是一定数量的空格。虽然这是两个任务,但是任务非常相似,与其分别为它们编写一个函数,不如写一个更通用的函数,可以在两种情况下使用。我们设计一个新的函数 show_n_char() (显示一个字符 n 次)。唯一要改变的是使用内置的值来显示字符和重复的次数, show_n_char() 将使用函数参数来传递这些值。
我们来具体分析。假设可用的空间是40个字符宽。调用 show_n_char(' * ', 40) 应该正好打印一行40个星号,就像 starbar() 之前做的那样。第2行 GIGATHINK, INT. 的空格怎么处理? GIGATHINK, INT. 是15个字符宽,所以第1个版本中,文字后面有25个空格。为了让文字居中,文字的左侧应该有12个空格,右侧有13个空格。因此,可以调用 show_n_char(' ', 12) 。
show_n_char() 与 starbar() 很相似,但是 show_n_char() 带有参数。从功能上看,前者不会添加换行符,而后者会,因为 show_n_char() 要把空格和文本打印成一行。程序清单9.2是修改后的版本。为强调参数的工作原理,程序使用了不同的参数形式。
程序清单9.2 lethead2.c 程序
/* lethead2.c */
#include <stdio.h>
#include <string.h> /* 为strlen()提供原型 */
#define NAME "GIGATHINK, INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Megapolis, CA 94904"
#define WIDTH 40
#define SPACE ' '
void show_n_char(char ch, int num);
int main(void)
{
int spaces;
show_n_char('*', WIDTH); /* 用符号常量作为参数 */
putchar('\n');
show_n_char(SPACE, 12); /* 用符号常量作为参数 */
printf("%s\n", NAME);
spaces = (WIDTH - strlen(ADDRESS)) / 2; /* 计算要跳过多少个空格*/
show_n_char(SPACE, spaces); /* 用一个变量作为参数*/
printf("%s\n", ADDRESS);
show_n_char(SPACE, (WIDTH - strlen(PLACE)) / 2);
printf("%s\n", PLACE); /* 用一个表达式作为参数 */
show_n_char('*', WIDTH);
putchar('\n');
return 0;
}
/* show_n_char()函数的定义 */
void show_n_char(char ch, int num)
{
int count;
for (count = 1; count <= num; count++)
putchar(ch);
}
该函数的运行结果如下:
****************************************
GIGATHINK, INC.
101 Megabuck Plaza
Megapolis, CA 94904
****************************************
下面我们回顾一下如何编写一个带参数的函数,然后介绍这种函数的用法。