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

C语言调用i_num函数未返回正确i值,无法获取array数组对应值是什么原因

问题原因

  1. i_num() 函数存在无限死循环,永远无法返回值。你设置的循环条件为while(i<3),但逻辑中i的值到2时就会被重置为0,i永远不会满足大于等于3的退出条件,main函数中的打印语句永远不会执行。
  2. 你需要实现的是每2秒输出一次对应下标的数组元素,原有写法就算修复死循环,也只会执行一次打印,无法实现持续输出的效果。

修复后可运行代码

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 3
#define var1 0x1000
#define var2 0x0100
#define var3 0x0200
#define var4 0x0300

// 每次调用返回下一个合法数组下标
int i_num(int i)
{
    sleep(2);
    i++;
    // 下标越界时重置为0
    if(i >= ARRAY_SIZE) {
        i = 0;
    }
    return i;
}

int main()
{
    unsigned int array[ARRAY_SIZE] = {var1|var2, var1|var3, var1|var4};
    // 初始下标设为-1,第一次调用后得到0,对应数组第一个元素
    int idx = -1;
    // 无限循环实现持续打印,按Ctrl+C可终止运行
    while(1) {
        idx = i_num(idx);
        printf("当前数组下标为%d,对应值为%#x\n", idx, array[idx]);
    }
    return 0;
}

核心修改说明

  • 移除i_num内部的死循环,每次调用仅完成单次等待、下标更新、边界校验的逻辑,直接返回可用下标
  • main函数中新增循环逻辑,持续更新下标并打印对应数组元素
  • 优化打印输出,增加下标展示,采用十六进制输出更易匹配你定义的宏值做校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:04