当前位置:嗨网首页>书籍在线阅读

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
****************************************

下面我们回顾一下如何编写一个带参数的函数,然后介绍这种函数的用法。