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

C语言如何实现连续打印字符串10秒?现有代码死循环问题排查

代码错误点

  • 循环内未更新计时变量:你仅在进入main函数时获取了一次clock()的返回值存入ticks,整个循环过程中ticks的值永远不会变化,只要初始值小于你写的阈值,循环条件就永远成立,必然出现死循环。
  • 数据类型溢出&单位使用错误:
    1. clock()的返回值类型是clock_t不是int,你写的10000000000已经远超出32位int的最大值(约21亿),赋值给int会发生溢出,得到不可预期的数值。
    2. clock()的返回值单位是时钟打点次数,不是秒也不是纳秒,要转换成运行时长需要除以系统定义的宏CLOCKS_PER_SEC,10秒对应的打点数值应该是10 * CLOCKS_PER_SEC,不是你写的1e10。
  • 计时逻辑不符合需求:clock()统计的是进程占用CPU的时间,而printf属于IO操作,进程在等待IO输出的时间不会被计入CPU时间。如果你要的是现实时间流逝10秒就停止,用clock()本身就不符合需求,会出现实际运行很久才停止的问题。

修正后代码示例

如果需要按现实流逝时间计时10秒:

#include <stdio.h>
#include <time.h>

int main() {
    // 记录开始的时间戳(单位秒)
    time_t start = time(NULL);
    while(1) {
        // 每次循环判断当前时间和开始时间的差
        if(difftime(time(NULL), start) >= 10) {
            break;
        }
        printf("Hello World\n");
    }
    return 0;
}

如果确实需要统计进程CPU占用时间满10秒停止:

#include <stdio.h>
#include <time.h>

int main() {
    clock_t start = clock();
    while(1) {
        // 每次循环更新当前CPU耗时
        if((double)(clock() - start) / CLOCKS_PER_SEC >= 10) {
            break;
        }
        printf("Hello World\n");
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:45:03