проблема с компиляцией моделирования лотереи

#c

#c

Вопрос:

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

 #include <stdio.h>

int
main(int argc, char const *argv[])
{
    //Welcome the User to the Program
        puts("============================");
        puts("         WELCOME TO         ");
        puts("============================");
        puts("  PROJECT : JACKPOT DREAMS  ");
        puts("============================");
    //Rogers 6 Original Numbers
        int nums[6] = { 5, 11, 15, 33, 42, 43 };

    //Ask how many years to simulate
        int years = 0;
        printf("How many years would you like to sleep for? :");
        scanf("%d", amp;years);
        printf("Ok. I will now play the lottery %d year(s)");
        printf("Sleep Tight :)....");
    //Generate Random Numbers
        int ctr;
        int randnums[6];
        srand(time(NULL));
        for( ctr = 0; ctr < 6; ctr   ) randnums[ctr] = (rand() % 50);

    //Check Numbers with Rogerns numbers
        int win;
        for( ctr = 0; ctr < 6; ctr   ) (randnums[ctr] == nums[ctr]) ? win = 1 : win = 0;




    return 0;
}
  

Это ошибка компиляции, которую я получаю:

 LotteryNumbers.c:29:79: error: expression is not assignable
  ...= 0; ctr < 6; ctr   ) (randnums[ctr] == nums[ctr]) ? win = 1 : win = 0;
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
4 warnings and 1 error generated.
  

Комментарии:

1. В сторону: обратите внимание, что rand() % 50 это дает вам число в диапазоне от 0 до 49 . Я не думаю, что 0 обычно это лотерейный номер (но он есть в рулетке). Вам также понадобится способ не дублировать числа, вы можете поискать алгоритм перетасовки Фишера-Йейтса.

Ответ №1:

Проблема заключается в том, что синтаксис при использовании троичного оператора является:

 <condition> ? <true-case-code> : <false-case-code>; 
  

Таким образом, в вашем случае:

 for( ctr = 0; ctr < 6; ctr   ) win = (randnums[ctr] == nums[ctr]) ? 1 : 0;
  

Однако это не означает, что все числа совпадают, это просто устанавливает win в результат текущего проверяемого номера. Чтобы проверить, все ли числа совпадают, вы можете попробовать:

 int win = 1;
for( ctr = 0; ctr < 6; ctr   )
{
    if(randnums[ctr] != nums[ctr])
    {
        win = 0;
        break; // if there's a mismatch we don't need to continue
    }
}
  

Ответ №2:

Изменение:

 for( ctr = 0; ctr < 6; ctr   ) (randnums[ctr] == nums[ctr]) ? win = 1 : win = 0;
  

Для:

 for( ctr = 0; ctr < 6; ctr   ) win = (randnums[ctr] == nums[ctr]) ? 1 : 0;
  

Комментарии:

1. также исправьте свои предупреждения!

2. Спасибо, это сработало, могу я спросить вас еще об одной вещи, как бы я заставил код зацикливаться и распечатывать, если бы числа совпали?

3. Я думаю, вам нужно было бы обернуть оба ваших существующих цикла for во внешний цикл for, который повторяется в течение нескольких лет.

4. Добавьте эту строку после вашего вызова srand: while (years-- > 0) { , а затем поместите эту строку после 2-го цикла for: } .

5. я сделал это, но это все еще не повторяется?