C语言调用i_num函数未返回正确i值,无法获取array数组对应值是什么原因
问题原因
i_num()函数存在无限死循环,永远无法返回值。你设置的循环条件为while(i<3),但逻辑中i的值到2时就会被重置为0,i永远不会满足大于等于3的退出条件,main函数中的打印语句永远不会执行。- 你需要实现的是每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
相关产品推荐
相关产品推荐

