You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让main中定义的int变量i,可在coin函数中执行i++并被main读取?

解决C语言局部变量跨函数修改的问题(无全局变量)

方案1:让函数返回硬币数量(推荐,可读性最优)

这种方式让coin函数专注于计算单一面额所需的硬币数,返回结果后在main中累加总数,逻辑独立且清晰,完全不需要共享变量。

修正后的代码:

#include <cs50.h>
#include <stdio.h>

// 返回指定面额n对应的硬币数量
int coin(int value, int n);

int main(void)
{
    // 提示用户输入找零金额
    int change = get_int("Change owed: ");

    // 强制输入正整数
    while (change <= 0)
    {
        change = get_int("Change owed: ");
    }

    int total_coins = 0;
    // 依次处理25、10、5、1分硬币
    total_coins += coin(change, 25);
    change %= 25; // 更新剩余金额
    total_coins += coin(change, 10);
    change %= 10;
    total_coins += coin(change, 5);
    change %= 5;
    total_coins += coin(change, 1);

    printf("%i\n", total_coins);
}

int coin(int value, int n)
{
    // 直接用除法计算硬币数,比循环减法更高效简洁
    return value / n;
}

方案2:使用指针传递变量地址

如果需要让coin函数直接修改main中的计数变量,可以通过指针传递变量的内存地址,让函数直接操作原变量:

修正后的代码:

#include <cs50.h>
#include <stdio.h>

// 新增指针参数count,用于修改外部计数变量
void coin(int value, int n, int *count);

int main(void)
{
    int change = get_int("Change owed: ");

    while (change <= 0)
    {
        change = get_int("Change owed: ");
    }

    int i = 0;
    // 传入i的地址(&i)
    coin(change, 25, &i);
    change %= 25;
    coin(change, 10, &i);
    change %= 10;
    coin(change, 5, &i);
    change %= 5;
    coin(change, 1, &i);

    printf("%i\n", i);
}

void coin(int value, int n, int *count)
{
    while (value / n >= 1)
    {
        value -= n;
        // 通过指针修改原变量的值,注意括号优先级
        (*count)++;
    }
}

关键说明

  • 方案1完全遵循函数的单一职责原则,代码可读性和可维护性更强,是更推荐的写法。
  • 方案2通过指针实现了局部变量的跨函数修改,避免了全局变量带来的耦合问题,符合你的需求。
  • 两种方法都不需要全局变量,同时实现了main函数和coin函数之间的数据交互,解决了原代码中变量未识别的编译错误。

内容的提问来源于stack exchange,提问作者girurerumu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:03:12