Rozdział 21. Losowanie bez powtórzeń. Dziwny przypadek
Ostatnio zmodyfikowano 2018-06-26 10:00
patryk98 Temat założony przez niniejszego użytkownika |
Rozdział 21. Losowanie bez powtórzeń. Dziwny przypadek » 2018-06-25 20:31:14 Witam. Treść zadania: " Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje." Napisałem program i działa raczej dobrze. Podczas pisania tego programu do sprawdzenia wypisałem sobie na ekran ccoutem czy to co wpisuję z klawiatury zapisuje się dobrze w tablicy. Gdy skończyłem cały program to chciałem usunąć linijkę, w której wypisywałem sobie na ekran zawartość 1 liczby w tablicy i wtedy pojawił się problem. Jeśli usunę tą linijkę to program sie odpala, ale po podaniu tych 3 liczb się wyłącza. Co może być tego powodem? W poniższym kodzie jest komentarz za tym coutem, o którego mi chodzi. Zastanawia mnie to czy wypisywanie czegoś na ekran ma wpływ na to co dzieje się z programem? Na pewno popełniłem jakiś głupi błąd, ale chciałbym aby mi to ktoś wyjaśnił. Mój kod: #include <iostream> #include <ctime> #include <cstdlib> #include <limits>
using namespace std;
void zapis( int t[], int iRozmiar ) { cout << "Podaj " << iRozmiar << " liczby:"; int i = 0; do { cin >> t[ i ]; cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); i++; } while( i < iRozmiar ); }
int losowanie() { return( rand() % 10 ) + 0; }
bool spr( int iLiczba, int t[], int ile ) { if( ile <= 0 ) return false; int i; do { if( t[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int main() { srand( time( 0 ) ); int save[ 3 ]; int wylosowancyh = 0; zapis( save, 3 ); cout << endl; cout << save[ 0 ]; cout << endl; cout << endl; do { int liczba = losowanie(); if( spr( liczba, save, wylosowancyh ) == false ) { liczba = save[ wylosowancyh ]; wylosowancyh++; } } while( wylosowancyh < 2 ); wylosowancyh = 0; do { cout << wylosowancyh + 1 << ". Wylosowana liczba to: "; cout << save[ wylosowancyh ] << endl; wylosowancyh++; } while( wylosowancyh < 2 ); return 0; }
|
|
YooSy |
» 2018-06-25 21:05:13 Program ma niezdefiniowane zachowanie (Undefined behavior) ponieważ używasz niezainicjalizowanej zmiennej. int i; do { if( t[ i ] == iLiczba ) return true; i++; } while( i < ile );
|
. |
|
patryk98 Temat założony przez niniejszego użytkownika |
» 2018-06-26 10:00:42 Dzięki! :D |
|
« 1 » |