如何让C语言odddigits函数返回循环每次迭代的odd变量值?
问题分析
你的代码里每次循环都会覆盖全局变量odd的值,函数最终只返回最后一次迭代的结果,自然拿不到所有循环计算出的odd值。下面提供两种实用的解决方案:
方法1:直接在函数内输出所有结果
如果只是需要打印每次循环的odd值,最简单的方式是在循环内部直接输出,无需返回值:
#include <cs50.h> #include <stdio.h> #include <math.h> void odddigits(long cardnum); int main(void) { long n = get_long("Number: "); odddigits(n); } void odddigits(long cardnum) { for (int i = 1; i < 16; i += 2) { // 用循环计算10的幂,避免pow的浮点数精度问题 long x = 1; for (int j = 0; j < i; j++) { x *= 10; } long odd = cardnum % x; while (odd >= 10) { odd = odd / 10; } printf("%ld\n", odd); // 每次计算完成后直接输出 } }
方法2:通过数组存储结果并传回主函数
如果需要把所有odd值传回main函数做后续处理,可以通过指针参数传递数组,让函数把结果存入数组,同时返回结果的数量:
#include <cs50.h> #include <stdio.h> #include <math.h> // 参数:卡号、存储结果的数组;返回值:结果的数量 int odddigits(long cardnum, long results[]); int main(void) { long n = get_long("Number: "); long results[8]; // i从1到15,步长2,共8次迭代 int count = odddigits(n, results); // 在main中处理所有结果 for (int i = 0; i < count; i++) { printf("%ld\n", results[i]); } } int odddigits(long cardnum, long results[]) { int index = 0; for (int i = 1; i < 16; i += 2) { // 用循环计算10的幂,避免pow的浮点数精度问题 long x = 1; for (int j = 0; j < i; j++) { x *= 10; } long odd = cardnum % x; while (odd >= 10) { odd = odd / 10; } results[index++] = odd; // 将结果存入数组 } return index; // 返回结果的总数量 }
额外提示
- 避免使用全局变量
odd,全局变量会导致数据被频繁覆盖,还会降低代码的模块化程度。 - 原代码中用
pow计算10的幂存在精度风险(浮点数转整数可能出错),改用循环计算幂更可靠。
内容的提问来源于stack exchange,提问作者Yashita Sharma
相关产品推荐
相关产品推荐

