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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:27