#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. я сделал это, но это все еще не повторяется?