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

C语言生成1-60不重复随机数报错:expected identifier or '(' before 'return'

编译错误修复及功能逻辑修正

编译错误原因

main函数末尾多了一个冗余的闭合大括号(})。在第二个for循环结束后,你额外添加了一个},导致编译器解析return 0;时语法结构混乱,触发了“expected identifier or '(' before 'return'”错误。

功能逻辑问题(编译通过后仍需修正)

原代码即使修复编译错误,也无法实现“生成6个1-60不重复随机数”的需求,存在以下问题:

  • srand(time(NULL))放在循环内,每次调用都会重置随机种子,导致生成的随机数序列重复甚至完全相同,应该仅在程序启动时调用一次。
  • rand()生成的是0到RAND_MAX的整数,直接赋值会超出1-60的范围,需要通过rand() % 60 + 1映射到目标区间。
  • 缺少重复检查逻辑,无法保证生成的随机数不重复。
  • main中的else分支仅调用函数但不将返回值赋值给数组元素,就算生成超出范围的数,数组值也不会被修正,完全无效。

修正后的完整代码

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

// 生成1-60之间不重复的随机数
int numeroRandomicoNaoRepetido(int sorteioMega[], int count) {
    int numeroSorteado;
    int isDuplicate;
    
    do {
        // 生成1-60的随机数
        numeroSorteado = rand() % 60 + 1;
        isDuplicate = 0;
        // 检查是否与已生成的数重复
        for (int x = 0; x < count; x++) {
            if (sorteioMega[x] == numeroSorteado) {
                isDuplicate = 1;
                break;
            }
        }
    } while (isDuplicate); // 重复则重新生成
    
    return numeroSorteado;
}

int main()
{
    int sorteioMega[6];
    int x;

    // 仅初始化一次随机种子,保证随机序列唯一
    srand(time(NULL));

    for (x = 0; x < 6; x++)
    {
        sorteioMega[x] = numeroRandomicoNaoRepetido(sorteioMega, x);
    }

    printf("Numeros sorteados de 1 a 60 da Mega Sena\n");
    for (x = 0; x < 6; x++)
    {
        printf("%d ", sorteioMega[x]);
    }
    printf("\n");
    
    return 0;
}

关键修正说明

  1. 将srand(time(NULL))移至main开头,仅执行一次初始化。
  2. 给numeroRandomicoNaoRepetido函数添加重复检查逻辑,通过do-while循环确保生成的数不重复。
  3. 传递当前已生成的元素个数count,避免遍历未初始化的数组元素。
  4. 直接通过rand() % 60 + 1生成1-60的随机数,移除无效的范围判断分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:52:28