2015-03-18 4 views
-1

В настоящее время я занимаюсь созданием моей второй основной программы на C. Я только начал изучать C, и у меня было несколько проблем, а также путаница в том, что делать дальше с этой программой.Проблемы с лотерейной программой

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

Основы сделаны, у меня просто есть несколько проблем, а также не зная, куда идти в определенных областях.

Проблемы:
«int weeks = year * 52» не работает, говорит, что элемент инициализатора не является постоянным.

Когда я возвращаю get_lotto_draw, я просто получаю сгруппированный номер, он не разделен в любом случае, поэтому я не уверен, как это сделать.

#include <stdio.h> //Alows input/output operations 
#include <stdlib.h> //Standard utility operations 

//Declaring Variables 
int year; 
char name[15]; 
char option; 
int lotteryPlayer[] = {5,11,15,33,42,43}; 
int i; 
int randomNums[49]; 
int *lotteryPtr = lotteryPlayer; 
int *randomPtr = randomNums; 
int weeks = 0; 

void print_array(int *lotteryPtr); 
int* get_lotto_draw(int *randomPtr); 

//Main Method 
int main(int argc, char *argv[]) 
{ 
    start: //Start of program 

    printf("\n---------------------------"); 
    printf("\nProject: Jackpot Dreams "); 
    printf("\n---------------------------\n"); 

    printf("\nWhat is your First Name?:> "); //Asks them for their choice 
    scanf("%s", &name); //Reads the input 

    printf("\nHow Many Years to Sleep?:> "); //Asks them for their choice 
    scanf("%d", &year); //Reads the input 
    weeks = year * 52; 

    printf("\nOk %s, I will play the lottery for %d years!\n",name, year); 
    sleep(1500); 
    printf("Sweet Dreams %s, don't let the bed bugs bite", &name); 
    sleep(1500); 
    printf(". "); 
    sleep(1500); 
    printf(". "); 
    sleep(1500); 
    printf("."); 
    sleep(2000); 

    printf("%d", get_lotto_draw); 
    system("PAUSE"); 
} 

//Returns an array of six random lottery numbers 1-49 
int* get_lotto_draw(int *randomPtr) 
{ 
    for (i=0 ; i<weeks ; i++) 
     return randomNums; 
} 

//Print out the content of an array 
void print_array(int *lotteryPtr) 
{ 
    printf("Hello"); 
} 

//Returns number of matches between two arrays 
int find_matches(int * lotteryPtr, int * randomPtr) 
{ 

} 

Update:

#include <stdio.h> //Alows input/output operations 
#include <stdlib.h> //Standard utility operations 

//Declaring Variables 
int year; 
char name[15]; 
char option; 
int lotteryPlayer[] = {5,11,15,33,42,43}; 
int i; 
int randomNums[49]; 
int *lotteryPtr = lotteryPlayer; 
int *randomPtr = randomNums; 
int weeks = 0; 

void print_array(int *lotteryPtr); 
int* get_lotto_draw(int *randomPtr); 

//Main Method 
int main(int argc, char *argv[]) 
{ 
    start: //Start of program 

    printf("\n---------------------------"); 
    printf("\nProject: Jackpot Dreams "); 
    printf("\n---------------------------\n"); 

    printf("\nWhat is your First Name?:> "); //Asks them for their choice 
    scanf("%s", name); //Reads the input 

    printf("\nHow Many Years to Sleep?:> "); //Asks them for their choice 
    scanf("%d", &year); //Reads the input 
    weeks = year * 52; 

    printf("\nOk %s, I will play the lottery for %d years!\n",name, year); 
    sleep(1500); 
    printf("Sweet Dreams %s, don't let the bed bugs bite", &name); 
    sleep(1500); 
    printf(". "); 
    sleep(1500); 
    printf(". "); 
    sleep(1500); 
    printf("."); 
    sleep(2000); 

    printf("%d", get_lotto_draw(*randomPtr)); 
    system("PAUSE"); 
} 

//Returns an array of six random lottery numbers 1-49 
int* get_lotto_draw(int *randomPtr) 
{ 
    for (i=0 ; i<weeks ; i++) 
     return randomNums; 
} 

//Print out the content of an array 
void print_array(int *lotteryPtr) 
{ 
    printf("Hello"); 
} 

//Returns number of matches between two arrays 
int find_matches(int * lotteryPtr, int * randomPtr) 
{ 

} 
+2

'' int weeks = year * 52 "не работает, говорит, что элемент initializer не является константным.' 'Year 'еще не имеет значения (неинициализирован). – DigitalNinja

+2

Глобальные переменные не могут быть инициализированы другими переменными. Не инициализируйте 'недели. Вместо этого добавьте 'weeks = year * 52' после' scanf ("% d", &year); '. ' get_lotto_draw() 'просто сломан. Вы возвращаетесь после первой итерации в цикле. – danyhow

+1

' i' также uninitialized в 'get_lotto_draw()' – DigitalNinja

ответ

0

Заимствования в основном из комментариев, есть несколько проблем, связанных с вашим кодом.

int weeks = year * 52; приводит к ошибке, поскольку year не был инициализирован. Измените его на int weeks = 0;, а затем положите weeks = year * 52 в начале вашей основной функции.

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

printf("%d", get_lotto_draw); печатает адрес get_lotto_draw в виде десятичной дроби («% D»), вы должны сделать это get_lotto_draw(args), чтобы получить возвращаемое значение get_lotto_draw.

система («ПАУЗА»), запускает команду PAUSE на корпусе. Я не знаю, приостановит ли это текущую программу, но если вы не хотите, чтобы программа выходила, вместо этого будет выполняться цикл.

while (1) {} 

Ваша реализация get_lotto_draw не делать то, что вы думаете, что он делает. То, что вы сейчас делаете, просто возвращает randomNums, то, что вы хотите сделать, это генерировать случайное число между 1 и 49. Для этого сначала нужно создать случайное число и изменить его на 48 и добавить один. Это даст вам случайное число от 1 до 49. srand(time(NULL)); int r = rand(); сгенерирует случайное число, а r %= 48; r += 1; изменит его на 48 и добавит его. Затем вы можете сделать это для каждой итерации этого цикла for и создать массив со значениями. Массив, который вы вернете, должен быть равен malloc 'd.

int get_lotto_draw() { 
    srand(time(NULL)); 
    int* rv = malloc(sizeof(int) * 6); 
    for (int i = 0; i < 6; i++) { 
     rv[i] = (rand() % 48) + 1; 
    } 
    return rv; 
} 

Функция find_matches также не реализована. Просто повторить через массивы, чтобы найти совпадения, должно быть достаточно.

int find_matches(int* a, int* b) { 
    int matches = 0; 
    for (int i = 0; i < 6; i++) { 
     if (a[i] == b[i]) { 
      matches++; 
     } 
    } 
    return matches; 
} 

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

void print_array(int* arr) { 
    for (int i = 0; i < 5; i++) { 
     printf("%d ", arr[i]); 
    } 
    printf("%d", arr[5]); 
    printf("\n"); // remove this if you don't want a newline at the end. 
} 
Смежные вопросы