Ошибка, когда случайное поколение чисел помогает в C

я делаю игру barquitos в C, и хочу способствовать тому, чтобы расположение кораблей регулирующего игрока (он играется против компьютера), было случайным. Для этого он думал о том, чтобы произвести случайные числа и распределить их ему в координаты индикаторного табло. Я тестирую алгоритм, чтобы производить числа в файле доказательства и все функционирует правильно:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    // Declaracion de variables
    int fila,i;
    int hora = time(NULL);
    //semilla de rand
    srand(hora);
    //ciclo generar 2 coordenadas
    for(i = 0; i<1; i++)
    {
           fila = rand()%10+1;
           printf("%d\n",fila);
    }
    return (fila);
}

Я это составляю и выполняю без какой-либо ошибки, и напечатай случайное число.

Протестировав это в этом свободном файле, я принимаю решение поместить это в код моей игры:

Сначала я заявляю и даю ему зерно рэнду () глобальной формы, перед main:

    int hora = time(NULL);
    //semilla rand()
    srand(hora);

И это одна из функций, которая была бы должна производить случайное число:

    int filaAle()
    {
         // Declaracion de variables
         int fila,i;
         //ciclo generar 2 coordenadas
         for(i = 0; i<2; i++)
         {
                fila = rand()%10+1;
                printf("%d\n",fila);
         }
         return fila;
    }

Составив, это ошибки, которые он возвращает мне (я открываю тех, у которых есть деталь):

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

Не, как решение этих ошибок, и я нуждаюсь в том, чтобы поместить эту функцию в работу. Какое-то решение есть?

Спасибо заранее.

1
задан 07.01.2017, 00:45
0 ответов

Ты не можешь звонить в функции time() и srand() ПЕРЕД методом main. Если у тебя хочет быть переменная hora как глобальная переменная ты должен инициализировать ее с постоянной стоимостью. Стандарт C99 определяет в точке 6.7.8 параграф 4:

All the expressions in an initializer for an object that ты существуешь static storage duration shall be constant expressions or string literals.

Все выражения в "стартапе" объекта, у которого есть продолжительность службы статического хранения [например, глобальные переменные] должны быть постоянными или буквальными выражениями цепи.

Помни, что в программе в C первая функция, которая призывается, main (за исключением неких исключений). Следовательно, твой код стремится к тому, чтобы призвать две функции до того, как функция main работайте.

Возможное решение состоит в том, чтобы ты получил зерно для твоего случайного генератора внутри той же функции, которая распределит случайные числа, избегая использовать изменчивые как глобальные - что с другой стороны очень плохая практика программирования-.

int filaAle() {

    //semilla rand()
    srand(time(NULL));
    // Declaracion de variables
    int fila,i;

    //ciclo generar 2 coordenadas
    for(i = 0; i<2; i++) {
        fila = rand()%10+1;
        printf("%d\n",fila);
    }

    return fila;
}
3
ответ дан 03.12.2019, 17:51

Теги

Похожие вопросы