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

计数迭代次数的变量为何会出现负值?附代码及输出示例

为啥生成次数会出负数?

看你的代码和输出,问题出在计数器的整数溢出:

  • 你应该是用了int类型来存储生成次数,32位有符号int的最大值是2147483647,一旦循环次数超过这个数值,有符号整数溢出后就会变成负数(这是补码存储机制导致的)。
  • 另外如果没给随机数设置种子(比如没调用srand(time(NULL))),每次运行的随机数序列都是固定的,要是目标数字刚好在序列里出现得极晚,甚至一直不出现,就更容易触发溢出。

怎么改

  • 把计数器换成unsigned int或者unsigned long long,这类无符号类型溢出后会从0开始循环计数,不会出现负值。
  • 在程序开头加上srand(time(NULL))(记得引入<time.h>头文件),让随机数序列每次运行都不一样,减少极端循环情况的概率。
  • 检查随机数的生成范围,确保目标数字在这个范围内,避免出现永远碰不到目标的死循环。

给你个简单的修正例子:

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

int main() {
    int target = 5; // 假设你要触发的目标数字是5
    unsigned long long count = 0; // 用无符号长整型存储计数
    int num;

    srand(time(NULL)); // 初始化随机种子,避免随机序列固定

    do {
        num = rand() % 10; // 生成0-9的随机数
        count++;
    } while (num != target);

    printf("生成次数:%llu\n", count);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:45:32