Dziwnie zachowująca się tablica int[]

0

Witam, mam problem z jedną funkcją i za nic nie wiem co jest nie tak. Otóż mam taką funkcję:

 
void porownaj_odp() 
{ 
        int wszystkie_odpowiedzi[21]; 
        ifstream plik("odpowiedzi"); 
                 
        string odpowiedzi;       
        int j = 0; 
        while(!plik.eof()) 
        { 
                getline(plik, odpowiedzi); 
                wszystkie_odpowiedzi[j] = atoi(odpowiedzi.c_str()); 
                cout << "po atoi wszystkie_odpowiedzi[j] = " << wszystkie_odpowiedzi[j] << endl; 
        }        
        plik.close(); 
        
        int wynik=0; 
        
        for (int i = 0; i <20; i++) { 
                cout << i << " = " << wszystkie_odpowiedzi[i] << endl; 
        } 
        
        cout <<endl; 
        
        for (int i=0;i<10;i++) 
        { 
                int z = tablica[0][i];    
                printf("temp2=%d \n", wszystkie_odpowiedzi[tablica[0][i]]); 
                
                if (tablica[1][i]==wszystkie_odpowiedzi[z]) 
                { 
                        cout << tablica[1][i]  << " == " << wszystkie_odpowiedzi[z]; 
                        wynik=wynik+1; 
                        cout<<"wynik to   "<<wynik << " z=" << z << endl; 
                        cout << "i=" << i << endl; 
                } 
        } 
} 

Problem jest z tablicą **wszystkie_odpowiedz[] **, otóż po odczytaniu odpowiedzi w linii wszystkie_odpowiedzi[j] = atoi(odpowiedzi.c_str()); wszystko wydaje się być ok. cout wyświetla prawidłowe wyniki. Natomiast zaraz po opuszczeniu pętli while linia cout << i << " = " << wszystkie_odpowiedzi << endl; wyświetla mi bzdury i liczby wzięte z kosmosu. W czym jest problem, co robię nie tak i jak to poprawić?

0

Nie inkrementujesz j w pętli while.

0

j cały czas wynosi 0, nie zmieniasz go w pętli, cały czas zapisujesz do pierwszego elementu tablicy. Poza tym eof() zwraca true dopiero wtedy, kiedy nastąpiła próba czytania ZA końcem pliku, bardziej prawidłowo będzie tak:

        for (int j = 0; getline(plik, odpowiedzi); ++j) 
        { 
                wszystkie_odpowiedzi[j] = atoi(odpowiedzi.c_str()); 
                cout << "po atoi wszystkie_odpowiedzi[j] = " << wszystkie_odpowiedzi[j] << endl; 
        }

Lepiej by było używać wektora zamiast tablicy o stałym rozmiarze, wtedy już tylko:

        while (getline(plik, odpowiedzi)) 
        { 
                wszystkie_odpowiedzi.push_back(atoi(odpowiedzi.c_str())); 
                cout << "po atoi wszystkie_odpowiedzi[j] = " << *wszystkie_odpowiedzi.rbegin() << endl; 
        }
0

Racja, ślepota chyba mnie już dotknęła. Idę spalić się ze wstydu. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1