- C语言从入门到精通(视频实战版)
- 胡超 梁伟 闫玉宝等编著
- 1303字
- 2021-03-28 21:40:10
6.2.2 函数的嵌套调用
函数的嵌套调用是指在多个函数中,实现函数之间的互相调用。例如,在程序中,分别定义了自定义函数a()和函数b()。但是,为了实现某一个功能,在函数a()中调用了函数b()或者两个函数之间互相调用。这样,就能够非常方便地实现函数间的运行切换。例如,在实例程序中,分别定义set()和get()两个函数,并且在函数set()中设置变量的值。当设置完成以后,便直接调用函数get()将这些变量值输出。具体代码如下:
void set(char *p); //声明自定义函数 void get(); char ch1[15]; //定义全局变量 #include<stdio.h> //包含标准输入/输出头文件 #include<string.h> //包含于字符串处理相关的头文件 main() //主函数 { char ch[15]; //定义字符数组变量 printf("请用户输入一串字符:\n"); //输出提示语 scanf("%s",&ch); //获取用户输入的数据 set(ch); //设置字符串 return 0; //程序正常返回 } void set(char *p) //实现字符串的设置功能 { printf("正在设置字符串:\n"); //输出提示语 for(int i=0;i<=15;i++) //使用for循环 { strcpy(&ch1[i],p); //循环复制字符数据 p++; //使字符指针自加,以便循环移动指针 } printf("字符串设置完毕!\n"); //输出提示语 get(); //输出字符串 } void get() //实现字符串的输出功能 { printf("正在输出字符串:\n"); //输出提示语 printf("%s\n",ch1); //输出字符串数据 }
在实例代码中,首先对自定义函数set()和get()进行了声明。并且在主函数中,提示用户输入一个字符串,程序会将该字符串保存在字符数组ch中。然后,再将该字符数组的首地址作为自定义函数set()的参数,并通过代码段“set(ch);”调用函数set()实现字符串数据的设置。
在自定义函数set()中,通过一个for循环结构结合函数strcpy()将字符指针参数所指向的字符数据循环复制到全局字符数组变量ch1中保存。当字符数据保存完毕之后,用户直接在该函数中调用了另一个函数get()实现数据的输出显示。
注意 在程序中,使用与字符数据处理相关的函数时,必须在实例程序中包含与之相关的头文件“string.h”。否则,函数将调用失败。
图6.5 实例程序的运行结果
程序运行后的结果如图6.5所示。
如果还需要实现更多的函数嵌套功能,可以根据该实例程序进行改写。但是,在修改过程中,必须注意各个函数之间的调用情况,避免发生函数的调用顺序混乱等错误。例如,用户将打电话时,常用的三个步骤,即拨号、等待以及通话,分别放置到三个自定义函数中。再通过函数的嵌套调用方式将这三个分散的步骤重新联系起来。具体的代码如下:
void num(char *p); //声明拨号自定义函数原型 void wait(); //声明等待通话的自定义函数原型 void tonghua(); //声明通话的自定义函数原型 void dianhua(); //声明打电话的定义函数原型 #include<stdio.h> //包含头文件 main() //主函数开始 { printf("模拟打电话的步骤说明函数的嵌套调用\n"); //输出提示语 dianhua(); //调用自定义函数实现打电话 return 0; } void dianhua() //实现自定义函数 { char *number="13527387"; //定义并初始化字符指针 num(number); //调用拨号自定义函数 wait(); //调用等待函数 tonghua(); //调用通话函数 } void num(char *p) //实现拨号函数功能 { printf("正在拨号……\n"); printf("所拨号码为:%s\n",p); } void wait() //实现等待函数功能 { printf("正在等待电话接通\n"); } void tonghua() //实现通话函数功能 { printf("正在通话……\n"); }
图6.6 程序运行结果
在上面的程序中,用户分别自定义了三个函数实现拨号、等待以及通话功能。在实现过程中,使用自定义函数“dianhua()”实现这三个步骤的联系,并输出相应的提示信息,如图6.6所示。
注意 如图6.6所示,用户使用函数的嵌套方法实现了打电话步骤的顺序。如果用户需要完善这个实例程序,可以再添加一个函数实现挂断电话的功能。关于该函数的具体实现,用户可以参考本节知识进行程序编写。