Простой C случайный номер лотереи - PullRequest
0 голосов
/ 23 октября 2018

Я хотел бы сгенерировать 5 различных чисел самым простым способом и поместить их в массив.Что-то не так с моим мышлением, не могли бы вы исправить мой код?

void lottery(int *array){
    int i = 0;
    while(i != 5){
        bool good = true;
        int number = rand()%90+1;
        for(int j=0; j<5; j++){
            if(array[j] == number)
                good = false;
                break;

        }
        if(good){
            array[i] == number;
            i = i+1;
        }
    }
}

int main(){
    srand(time(0));
    int numbers[5];
    lottery(numbers);

    for(int i =0; i<5; i++){
        printf("%d, ",numbers[i]);
    }
    return 0;
}

1 Ответ

0 голосов
/ 23 октября 2018

Включая выводы kingW3 и rici и немного исправляя его:

// compiles without errors with:
// clang -O3 -g3 -Weverything -W -Wall -Wextra -Wpedantic -fsanitize=bounds  -std=c11  -o stacktest stacktest.c 
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>

void lottery(int *array);
void lottery(int *array){
    int i = 0;
    while(i != 5){
        bool good = true;
        int number = rand()%90+1;
        // limit is 'i' because you fill the array in order
        for(int j=0; j<i; j++){
            // Would always `break` without the curly brackets
            if(array[j] == number){
                good = false;
                break;
            }
        }
        if(good){
            // Use '=' instead of '=='
            array[i] = number;
            i = i+1;
        }
    }
}

int main(void){
    // time returns type 'type_t', needs casting to get rid of
    // warning
    srand( (unsigned int) time(0));
    // return of rand() is always >= 0, so 
    // initialize with a negative number
    int numbers[5] = {-1};
    int i;
    lottery(numbers);
    for(i =0; i<4; i++){
        printf("%d, ",numbers[i]);
    }
    printf("%d\n",numbers[i]);
    return 0;
}

Отсутствующие скобки были еще одной ошибкой.

Предостережение: time(), скорее всего, имеет разрешение в одну секунду, поэтому не запускайте его слишком быстро по порядку, иначе вы получите те же числа.

...