C primer plus (第六版)第十二章 编程练习第1题

题目:

  1. 不使⽤全局变量,重写程序清单12.4。

  2. 程序清单12.4:

    cpp 复制代码
    #include <stdio.h>
    int units = 0;         /* 外部变量  */
    void critic(void);
    int main(void)
    {
         extern int units;  /* 可选的重复声明 */
         printf("How many pounds to a firkin of butter?\n");
         scanf("%d", &units);
         while (units != 56)
              critic();
         printf("You must have looked it up!\n");
         return 0;
    }
    void critic(void)
    {
         /* 删除了可选的重复声明 */
         printf("No luck, my friend. Try again.\n");
         scanf("%d", &units);
    }

思路:

  1. 用自动变量units代替全局变量units,此时需要critic()函数带返回值并将返回值赋值给unit用来和56进行比较;

    cpp 复制代码
    #include <stdio.h>
    int critic(void);
    int main()
    {
        int units;
        
        printf("How many pounds to a firkin of butter?\n");
        scanf("%d",&units);
        while (units != 56)
            units = critic();
        printf("You must have looked it up!\n");
        return 0;
    }
    
    int critic(void)
    {
        int temp;
        printf("No luck, my friend. Try again.\n");
        scanf("%d", &temp);
        return temp;
    }
  2. 还是用自动变量units代替全局变量units,不同的是critic()函数只传入units的指针地址,输入的数据是通过直接修改相同指针下的数据实现的。

    cpp 复制代码
    #include <stdio.h>
    void critic(int * pt);
    int main()
    {
        int units;
            
        printf("How many pounds to a firkin of butter?\n");
        scanf("%d", &units);
        while (units != 56)
        {
            critic(&units);
        }
        printf("You must have looked it up!\n");
        return 0;
    }
    void critic(int * pt )
    {
        printf("No luck, my friend. Try again.\n");
        scanf("%d", pt);
    }
相关推荐
刘琦沛在进步2 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
VekiSon1 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
2的n次方_2 小时前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构
_F_y2 小时前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言
郝学胜-神的一滴3 小时前
深入解析C/S模型下的TCP通信流程:从握手到挥手的技术之旅
linux·服务器·c语言·网络·网络协议·tcp/ip
island13144 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
Once_day5 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
坚果派·白晓明6 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
风指引着方向7 小时前
图编译优化全链路:CANN graph-engine 仓库技术拆解
c语言