如何让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
相关产品推荐
相关产品推荐

