Gratuluję!
Kilka porad ode mnie, bo przeczuwam, że już Cię palce bolą od przepisywania (tudzież kopiowania i wklejania) tego bloku:
if (poprawne == false)
break;

Funkcję sprawdzWiersze (tak samo jak sprawdzKolumny i sprawdz3x3) można skrócić (i jednocześnie uprościć) do takiej postaci:
bool sprawdzWiersze(int tablica[9][9])
{
for (int i = 0; i < 9; i++) // petla przechodzaca po wierszach
{
for (int j = 0; j < 9; j++) // petla przechodzaca po kolumnach w wierszu
{
for (int k = j + 1; k < 9; k++) // petla przechodzaca po pozostalych elementach w wierszu
{
// szukajaca czy sa powtarzajace sie wyrazy w wierszu
if (tablica[i][j] == tablica[i][k])
{
return false;
}
}
}
}
return true;
}
Prawda, że prościej? Unikasz w ten sposób kopiowania wyżej wymienionego warunku, i jednocześnie nie musisz przekazywać do funkcji zbędnego parametru poprawne.
Porada nr. 2 (raczej drobnostka, ale może kiedyś Ci się ta wiedza przyda) - aby sprawdzić, czy zmienna typu bool ma wartość false najczęściej korzysta się z takiej składni:
if (!poprawne)
break;