[C++] Wczytywanie i zapisywanie danych do pliku - w jednym z kilku przypadków operacji na plikach dane nie zapisują się do pliku.
Ostatnio zmodyfikowano 2013-09-29 22:00
barti2287 Temat założony przez niniejszego użytkownika |
[C++] Wczytywanie i zapisywanie danych do pliku - w jednym z kilku przypadków operacji na plikach dane nie zapisują się do pliku. » 2013-09-29 17:46:28 Witam. W funkcji, która powinna wczytywać oceny z pliku, dodawać do nich wprowadzone przez użytkownika, obliczać średnią i zapisywać te dane do pliku pojawił się błąd, tzn. kiedy uruchomię konsolę wszystko jest dobrze, ale kiedy przeglądam pliki okazuje się, że zapisane, bądź raczej nadpisane, zostały tylko średnia i ilość ocen. Plik z ocenami pozostał taki sam, mimo wyraźnej instrukcji (i braku errorów ze strony kompilatora). Poniżej wklejam dwa fragmenty kodu: pierwszy z funkcją, a drugi z jej wywołaniem. Bardzo proszę o szybką pomoc. float srg_nowe_oceny_dodaj( string np2, string np3, string np4 ) { int iod, iop, io, i; string np; float soc[ 30 ], noc[ 30 ], sr; soc[ 29 ] = 0; noc[ 29 ] = 0; cout << "Podaj ilosc dodawanych ocen: "; cin >> iod; fstream wczytaj_iop( np4.c_str(), ios::in | ios::out ); if( wczytaj_iop.good() ) { wczytaj_iop >> iop; wczytaj_iop.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; io = iop + iod; cout << "Podaj oceny: "; for( i = 0; i < iod; i++ ) { cin >> noc[ i ]; } fstream dodaj_nowe_oceny( np2.c_str(), ios::in | ios::out ); if( dodaj_nowe_oceny.good() ) { for( int i = 0; i < iop; i++ ) { dodaj_nowe_oceny >> soc[ i ]; cout << "Ocena " << i + 1 << ": " << soc[ i ] << "\n"; soc[ 29 ] = soc[ 29 ] + soc[ i ]; } for( int i = 0; i < iod; i++ ) { dodaj_nowe_oceny << noc[ i ] << " "; cout << "Ocena " << iop + i + 1 << ": " << noc[ i ] << "\n"; noc[ 29 ] = noc[ 29 ] + noc[ i ]; } dodaj_nowe_oceny.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; sr =( soc[ 29 ] + noc[ 29 ] ) / io; fstream dodaj_nowa_srednia( np3.c_str(), ios::in | ios::out | ios::trunc ); if( dodaj_nowa_srednia.good() ) { dodaj_nowa_srednia << sr; dodaj_nowa_srednia.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; fstream dodaj_nowa_io( np4.c_str(), ios::in | ios::out | ios::trunc ); if( dodaj_nowa_io.good() ) { dodaj_nowa_io << io; dodaj_nowa_io.close(); } else cout << "Dostep do pliku zabroniony!"; cout << "\nNowa Ilosc Ocen: " << io << "\n"; cout << "Nowa Srednia: "; return sr; }
case 2: { cout << srg_nowe_oceny_dodaj( np2, np3, np4 ); cout << "\n\n"; goto start; break; }
@edit Jeśli ktoś chce mogę wrzucić cały kod. |
|
barti2287 Temat założony przez niniejszego użytkownika |
» 2013-09-29 22:00:48 Znalazłem rozwiązanie! Wystarczyło zamknąć plik, a potem otworzyć go jeszcze raz i dopiero wtedy zapisać oceny do pliku. Dla ludzi mających ten sam problem wklejam poniżej całą funkcję: float srg_nowe_oceny_dodaj( string np2, string np3, string np4 ) { int iod, iop, io, i; string np; float soc[ 30 ], noc[ 30 ], sr; soc[ 29 ] = 0; noc[ 29 ] = 0; cout << "Podaj ilosc dodawanych ocen: "; cin >> iod; fstream wczytaj_iop( np4.c_str(), ios::in | ios::out ); if( wczytaj_iop.good() ) { wczytaj_iop >> iop; wczytaj_iop.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; io = iop + iod; cout << "Podaj oceny: "; for( i = 0; i < iod; i++ ) { cin >> noc[ i ]; } fstream dodaj_nowe_oceny( np2.c_str(), ios::in | ios::out ); if( dodaj_nowe_oceny.good() ) { for( int i = 0; i < iop; i++ ) { dodaj_nowe_oceny >> soc[ i ]; cout << "Ocena " << i + 1 << ": " << soc[ i ] << "\n"; soc[ 29 ] = soc[ 29 ] + soc[ i ]; } for( int i = 0; i < iod; i++ ) { cout << "Ocena " << iop + i + 1 << ": " << noc[ i ] << "\n"; noc[ 29 ] = noc[ 29 ] + noc[ i ]; } dodaj_nowe_oceny.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; dodaj_nowe_oceny.open( np2.c_str(), ios::app ); if( dodaj_nowe_oceny.good() ) { for( int i = 0; i < iod; i++ ) { dodaj_nowe_oceny << noc[ i ] << "\n"; } dodaj_nowe_oceny.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; sr =( soc[ 29 ] + noc[ 29 ] ) / io; fstream dodaj_nowa_srednia( np3.c_str(), ios::in | ios::out | ios::trunc ); if( dodaj_nowa_srednia.good() ) { dodaj_nowa_srednia << sr; dodaj_nowa_srednia.close(); } else cout << "Dostep do pliku zabroniony!\n\n"; fstream dodaj_nowa_io( np4.c_str(), ios::in | ios::out | ios::trunc ); if( dodaj_nowa_io.good() ) { dodaj_nowa_io << io; dodaj_nowa_io.close(); } else cout << "Dostep do pliku zabroniony!"; cout << "\nNowa Ilosc Ocen: " << io << "\n"; cout << "Nowa Srednia: "; return sr; }
|
|
« 1 » |