Есть несколько вопросов, на которые уже указывают комментарии. Во-первых, ваше заявление if
не работает так, как вы ожидаете. Он проверяет, не является ли n1
- n8
ненулевым или n9
нулевым.
Во-вторых, после первоначального оператора if вы просто случайным образом меняете позицию, но не проверяете, не является ли это значение ненулевым.
Возможное решение:
void putTile( int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9 ) {
int i = ( ( ( rand() % 10 ) ) < 5 ? 2 : 4 );
if ( n1 == 0 || n2 == 0 || n3 == 0 || n4 == 0 || n5 == 0 || n6 == 0 || n7 == 0 || n8 == 0 || n9 == 0 ) {
while ( true ) {
switch ( ( rand() % 9 ) + 1 ) {
case 1:
if ( n1 == 0 ) {
n1 = i;
return;
}
break;
case 2:
if ( n2 == 0 ) {
n2 = i;
return;
}
break;
case 3:
if ( n3 == 0 ) {
n3 = i;
return;
}
break;
case 4:
// ...
}
}
}
Обратите внимание, это не очень эффективно и имеет много дубликатов. Я бы предложил использовать массивы.