Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

odczyt z pliku nie działa jak powinien

Ostatnio zmodyfikowano 2016-05-13 23:11
Autor Wiadomość
Damian155
Temat założony przez niniejszego użytkownika
odczyt z pliku nie działa jak powinien
» 2016-05-13 08:01:53
Witam
Mam problem z odczytywaniem save z pliku.Po pierwszej grze program zapisuje potrzebne dane do pliku, a przy następnym uruchomieniu można to  wczytać(w teorii). Problem w tym, że program (chyba) to doczytuje ale nie wprowadza do zmiennych gry :/ (tu argument dlaczego nie) zapisałem linijkę która miała wypisać na ekran ilość pieniędzy z pliku. No i nic się nie dzieje. Kompilator nie wykrył żadnych błędów ani ostrzeżeń :/ To mój pierwszy większy program więc może być trochę chaotyczny :D Proszę Was o pomoc.
C/C++
ladowanie_1.open( "save/save_1.SAVE", std::ios::in );
if( ladowanie_1.good() == true )
{
    std::cout << "znalazlem" << std::endl;
}
while( getline( ladowanie_1, linia ) );

{
    switch( nr_linii )
    {
    case 1: pieniadze = atoi( linia.c_str() ); break;
    case 2: tendencja = atoi( linia.c_str() ); break;
    case 3: tendencja_sila_ludzka = atoi( linia.c_str() ); break;
    case 4: tendencja_stal = atoi( linia.c_str() ); break;
    case 5: tendencja_zywnosc = atoi( linia.c_str() ); break;
    case 6: licznik_budowy_fab = atoi( linia.c_str() ); break;
    case 7: licznik_budowy_farm = atoi( linia.c_str() ); break;
    case 8: licznik_budowy_kosza = atoi( linia.c_str() ); break;
    case 9: licznik_budowy_przemysl = atoi( linia.c_str() ); break;
    case 10: licznik_budowy_stal = atoi( linia.c_str() ); break;
    case 11: licznik_rozbudowy_1 = atoi( linia.c_str() ); break;
    case 12: licznik_rozbudowy_2 = atoi( linia.c_str() ); break;
    case 13: zywnosc = atoi( linia.c_str() ); break;
    case 14: ludzie = atoi( linia.c_str() ); break;
    case 15: stal = atoi( linia.c_str() ); break;
    case 16: status_fab = linia; break;
    case 17: status_farm = linia; break;
    case 18: status_kosza = linia; break;
    case 19: status_przemysl = linia; break;
    case 20: status_stal = linia; break;
    case 21: pole_budowy_1 = linia; break;
    case 22: pole_budowy_2 = linia; break;
        std::cout << pieniadze;
    }
    nr_linii++;
}
A i jeszcze takie pytanie: Da się odwołać do konkretnej linijki w pliku. Sorry ale tak średnio umiem odczyt :/
P-148152
darko202
» 2016-05-13 08:40:43
1.
Poruszanie się po pliku z danymi
http://cpp0x.pl/kursy/Kurs-C++​/Obsluga-plikow/305

2. poznaj technologię "debugowanie programu"
przy większych projektach - jest zabójczo skuteczna :-)

np.
Debugowanie i testowanie aplikacji z
https://msdn.microsoft.com​/pl-pl/library/jj620919.aspx
P-148153
Damian155
Temat założony przez niniejszego użytkownika
» 2016-05-13 08:59:08
No ok, ale nadal nie widzę błędu w kodzie :/ Dodatkowo pytanie: Czy można debugować w Code::blocksie ? Jest tam zakłada debug ale wszystko jest nie aktywne :(
P-148155
mateczek
» 2016-05-13 09:09:00
Musiał byś wkleić kod, który da się skompilować aby sprawdzić co się dzieje. Błąd może być gdzieś zupełnie indziej niż się tobie wydaje.
narazie mogę strzelać że może tutaj jest bubel
C/C++
ladowanie_1.open( "save/save_1.SAVE", std::ios::in );
if( ladowanie_1.good() == true )
{
    std::cout << "znalazlem" << std::endl;
}
nr_linii = 1; // tutaj bubel być może
while( getline( ladowanie_1, linia ) );

{
   
    switch( nr_linii )
    {
    case 1: pieniadze = atoi( linia.c_str() ); break;
    case 2: tendencja = atoi( linia.c_str() ); break;
    case 3: tendencja_sila_ludzka = atoi( linia.c_str() ); break;
    case 4: tendencja_stal = atoi( linia.c_str() ); break;
    case 5: tendencja_zywnosc = atoi( linia.c_str() ); break;
    case 6: licznik_budowy_fab = atoi( linia.c_str() ); break;
    case 7: licznik_budowy_farm = atoi( linia.c_str() ); break;
    case 8: licznik_budowy_kosza = atoi( linia.c_str() ); break;
    case 9: licznik_budowy_przemysl = atoi( linia.c_str() ); break;
    case 10: licznik_budowy_stal = atoi( linia.c_str() ); break;
    case 11: licznik_rozbudowy_1 = atoi( linia.c_str() ); break;
    case 12: licznik_rozbudowy_2 = atoi( linia.c_str() ); break;
    case 13: zywnosc = atoi( linia.c_str() ); break;
    case 14: ludzie = atoi( linia.c_str() ); break;
    case 15: stal = atoi( linia.c_str() ); break;
    case 16: status_fab = linia; break;
    case 17: status_farm = linia; break;
    case 18: status_kosza = linia; break;
    case 19: status_przemysl = linia; break;
    case 20: status_stal = linia; break;
    case 21: pole_budowy_1 = linia; break;
    case 22: pole_budowy_2 = linia; break;
        std::cout << pieniadze;
    }
    nr_linii++;
    if( nr_linii == 23 ) nr_linii = 1; // tutaj może drugi ??
   
}

Debuguje się wszędzie podobnie. ikonka z robalem i Praca krokowa.
https://www.youtube.com/watch​?v=L9JvSHYLvuw
P-148156
Damian155
Temat założony przez niniejszego użytkownika
» 2016-05-13 09:23:13
Dziękuję za pomoc, na razie już nie mam czasu ale później zobaczę czy coś to zmieni
P-148157
Monika90
» 2016-05-13 11:02:39
zapisałem linijkę która miała wypisać na ekran ilość pieniędzy z pliku. No i nic się nie dzieje.

Bo ją zapisałeś w takim miejscu że się nigdy nie wykona.
std::cout << pieniadze;
 powinno być po instrukcji switch, a nie w środku.
P-148158
michal11
» 2016-05-13 11:11:27
Może nie zamykasz pliku save ?

Poza tym jeżeli to całe twoje wczytywanie danych z pliku to moim zdaniem bez sensu jest tu tużycie pętli, ten swich i pętla to tylko dodatkowe instrukcje, daj to jako normalny blok instrukcji i już.
P-148159
Monika90
» 2016-05-13 11:30:56
Taki sposób wczytywania z pliku pochodzi z kursu Zelenta.

Zamiast tego można wczytać normalnie
C/C++
ladowanie_1 >> pieniadze >> tendencja >> tendencja_sila_ludzka >> itd...

Nawet z tekstem zawierającym spacje można sobie poradzić za pomocą manipulatora std::quoted
P-148160
« 1 » 2
  Strona 1 z 2 Następna strona