C语言如何实现按位数组每30秒移动一个索引并周期循环?
现有代码问题修正
- 你的代码存在多个基础语法、逻辑漏洞:
- 数组未指定类型、未初始化索引变量
i,缺少必要的结束符号 msleep(3000)为毫秒级休眠,仅对应3秒,不符合你要求的30秒间隔- 没有做索引越界判断,
i持续自增会访问到数组外的非法内存 - 单独写
array[i++]没有实际作用,printf语句缺少右括号和分号
- 数组未指定类型、未初始化索引变量
实现思路
- 用索引对数组长度取模的方式自动实现循环,不需要额外写边界判断逻辑,每次索引自增后
i = i % 数组长度就可以自动回到0号索引 - 休眠逻辑根据系统调整:Windows平台用
Sleep(30*1000)实现30秒休眠,Linux平台用sleep(30)即可 - 套入无限循环即可持续运行,如果你要求的是累计3000秒后重置索引,额外加一个计时变量统计总休眠时长,到阈值后直接把
i设为0即可
完整可运行示例代码
#include <stdio.h> // 不同平台的休眠头文件适配 #ifdef _WIN32 #include <windows.h> #define SLEEP_SECOND(s) Sleep((s)*1000) #else #include <unistd.h> #define SLEEP_SECOND(s) sleep(s) #endif int main() { // 这里替换为你实际的var1/var2/var3取值,此处为测试赋值 int var1 = 1, var2 = 2, var3 = 4; int array[3] = {var1 | var2, var1 | var2, var1 | var3}; int arr_len = sizeof(array) / sizeof(array[0]); int i = 0; int total_runtime = 0; // 统计总运行时长,用于3000秒重置逻辑 const int RESET_SECOND = 3000; // 重置阈值 while(1) { printf("The array is currently this: %d\n", array[i]); SLEEP_SECOND(30); // 休眠30秒 total_runtime += 30; // 两种循环逻辑二选一: // 1. 遍历完数组就自动回到开头(3个元素的话90秒循环一次) i = (i + 1) % arr_len; // 2. 按你要求的累计3000秒后回到第一个索引,注释掉上面的逻辑打开下面的即可 /* i++; if(total_runtime >= RESET_SECOND) { i = 0; total_runtime = 0; } // 防止中间i超过数组长度出现越界 if(i >= arr_len) { i = 0; } */ } return 0; }
内容的提问来源于stack exchange,提问作者tora231
相关产品推荐
相关产品推荐

