Program crashuje się z niewiadomej przyczyny po skończeniu pętli
Ostatnio zmodyfikowano 2014-10-11 15:30
treekt Temat założony przez niniejszego użytkownika |
Program crashuje się z niewiadomej przyczyny po skończeniu pętli » 2014-10-11 01:30:16 Napisałem program (wprawdzie jeszcze nie skonczony ale całe sedno już jest) któremu podajemy liczbe uczniów, następnie podajemy tyle uczniów z imienia i nazwiska ile zadeklarowaliśmy wcześniej liczbą. Dane są zapisywane do pliku po czym program musimy wlaczyc od nowa. Program ma za zadanie wyznaczać uczniów mających iść do kolejki z podanej listy, jeden po drugim. Po ponownym włączeniu możemy rozpocząć nową kolejke. Program wczytuje do tablicy wszystkie wiersze (uczniów) z pliku a potem rozpoczyna kolejke. Generalnie każdy powinien zrozumieć po kodzie. A więc w czym mam problem? Nieciekawy "błąd" pojawia się pętli od linijki 55 do 60. Dane z pliku są wpisywane do tablicy pięknie ładnie lecz gdy warunek eof zwróci true i pętla sie zakonczy program sie crashuje i zamyka. Dałem w pętli testowią wiadomość "test" i poza pętlą "test2" i w pętli test wyświetla sie natomiast już po pętli "test2" jest nie widoczne i następuje crash. Proszę o wskazanie błędu i rozwiązanie go, nie rozumiem totalnie czemu sie tak dzieje, dopiero zaczynam programowanie w c++ wiec jestem laikiem. Część gdzie jest problem: string uczen[iUczniow]; // Deklaracja tablicy aby przypisac kazdy wiersz do osobnej tablicy Plik.open("Uczniowie.txt", ios::in); // Zapisanie wierszy do tablic for(int i = 0; !Plik.eof(); i++){ getline(Plik, uczen[i]); cout<<"test"; } cout<<"test2"; Plik.close();
Cały kod: http://pastebin.com/hKFgDAvi |
|
Monika90 |
» 2014-10-11 08:18:24 for( int i = 0; !Plik.eof(); i++ ) { getline( Plik, uczen[ i ] ); cout << "test"; }
W tej pętli zmienna i wychodzi poza dopuszczalny zakres tablicy. Użycie eof() w warunku pętli to na ogół głupi pomysł. A tak przy okazji, możliwość deklaracji tablicy o rozmiarze określonym za pomocą zmiennej nie należy do standardowego C++, choć może za 3 lata już będzie w standardzie. |
|
treekt Temat założony przez niniejszego użytkownika |
» 2014-10-11 15:20:48 Okey to w takim razie co mam dać w tej pętli żeby wszystko było legit?
|
|
stryku |
» 2014-10-11 15:28:06 Jeżeli nie wiesz ile będzie w pliku linii to w vectorze możesz zrobić. std::vector < std::string > uczen; char buf[ max_dl_linii ]; while( plik.getline( buf, max_dl_linii ) ) uczen.push_back( std::string( buf ) );
|
|
treekt Temat założony przez niniejszego użytkownika |
» 2014-10-11 15:30:05 Okey poradzilem sobie ;) Zrobiłem w ten sposób ;) for(int i = 0; i < iUczniow ; i++){ getline(Plik, uczen[i]); cout<<"test"; }
|
|
« 1 » |