C++ Zapis znika po wyłączeniu programu.
Ostatnio zmodyfikowano 2010-02-08 21:12
Bartaz Temat założony przez niniejszego użytkownika |
C++ Zapis znika po wyłączeniu programu. » 2010-02-08 16:34:33 Witam mam taki problem,zapisuje sobie imię w pliku ale jak wyłącze program to to imię z pliku znika i nie mogę już wczytać . Fragment kodu programu; zap_i_wczyt: char klaw; klaw = getch(); switch( klaw ) { case 'z': while( zap < 7 ) { plik << "\n"; plik << firma.imie[ zap ]; zap = zap + 1; } plik.close(); cout << "Zapisano" << endl; Sleep( 3000 ); goto zap_i_wczyt; break; case 'w': plik1 >> firma.imie[ 1 ]; cout << firma.imie[ 1 ] << endl; break; }
|
|
malan |
» 2010-02-08 17:00:33 Zapewne masz otwarty plik do zapisu i do odczytu, tak się (ponoć) nie robi - to raz. Dwa nie czyścisz flag ( clear ). Radzę Ci wszystko dotyczące pliku i zapisywanie zrobić w switch-u, czyli mniej więcej: case 'z': { fstream plik; plik.open(...); if... plik <<... plik.clear(); } Tak samo w przypadku odczytywania danych. |
|
DejaVu |
» 2010-02-08 17:05:31 Daj cały program - ten fragment nie ma prawdopodobnie nic wspólnego z opisanym problemem. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-08 17:17:13 To jest na końcu. Teraz jest ustawione tak żeby odrazu przechodziło do menu zapisu i wczytu a normalnie zaczyna się od podania nowego pracownika. #include <iostream> #include <conio.h> #include <windows.h> #include <dos.h> #include <fstream> using namespace std; ofstream plik( "save.txt" ); ifstream plik1( "save.txt" ); struct pracownik { string imie[ 30 ]; string nazwisko[ 30 ]; int wiek[ 30 ]; }; int main() { SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY ); pracownik firma; cout << "" << endl; int i = 0; int a = 0; int c = 0; int ile = 1; int f = 0; string litera; goto opcje; for( int d = 0; i < 7; d++ ) { i = i + 1; a = a + 1; c = c + 1; cout << "" << endl; cout << "" << endl; cout << "" << endl; cout << "[K]oniec dodawania pracownikow [D]alej [W]yjscie" << endl; cout << "" << endl; cout << "[S]zukaj pracownikow" << endl; cout << "" << endl; cout << "[O]pcje" << endl; cout << "Podaj imie nowego pracownika" << endl; cin >> firma.imie[ i ]; cout << "Podaj nazwisko nowego pracownika" << endl; cin >> firma.nazwisko[ a ]; cout << "Podaj wiek nowego pracownika" << endl; cout << "" << endl; cin >> firma.wiek[ c ]; cin >> litera; if( litera == "k" ) { goto cos; } else if( litera == "w" ) { return( 0 ); } else if( litera == "d" ) { ile = ile + 1; system( "cls" ); } else if( litera == "o" ) { system( "cls" ); goto opcje; } else if( litera == "s" ) { goto szukaj; } } cos: cout << "Wyswietlam nowych pracownikow" << endl; system( "cls" ); i = 1; a = 1; c = 1; while( f < ile ) { f = f + 1; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ i ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ a ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ c ] << endl; cout << "" << endl; cout << "" << endl; cout << "" << endl; cout << "" << endl; i = i + 1; c = c + 1; a = a + 1; } szukaj: int szukany_wiek_firma; szuk: cout << "Szukasz po wieku podaj wiek" << endl; cin >> szukany_wiek_firma; system( "cls" ); if( szukany_wiek_firma == firma.wiek[ 1 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 1 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 1 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 1 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 2 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 2 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 2 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 2 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 3 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 3 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 3 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 3 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 4 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 4 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 4 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 4 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 2 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 5 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 5 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 5 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 6 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 6 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 6 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 6 ] << endl; } else if( szukany_wiek_firma == firma.wiek[ 7 ] ) { cout << "Osoba znaleziona jej dane to: " << endl; cout << "_______________________________" << endl; cout << "Imie:" << firma.imie[ 7 ] << endl; cout << "" << endl; cout << "Nazwisko: " << firma.nazwisko[ 7 ] << endl; cout << "" << endl; cout << "Wiek: " << firma.wiek[ 7 ] << endl; } cout << "Nie znalazlem takiego pracownika" << endl; opcje: cout << "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n"; cout << " Opcje" << endl; cout << "" << endl; cout << ""; cout << "[Z]apisz nowych pracownikow do pliku" << endl; cout << "" << endl; cout << "[W]czytaj nowych pracownikow z pliku" << endl; cout << "" << endl; cout << "[P]owrot" << endl; int zap = 1; zap_i_wczyt: char klaw; klaw = getch(); switch( klaw ) { case 'z': while( zap < 7 ) { plik << firma.imie[ zap ]; zap = zap + 1; } plik.close(); cout << "Zapisano" << endl; Sleep( 3000 ); goto zap_i_wczyt; break; case 'w': plik1 >> firma.imie[ 1 ]; cout << firma.imie[ 1 ] << endl; break; } getch(); goto szuk; system( "PAUSE" ); return( 0 ); }
|
|
DejaVu |
» 2010-02-08 17:42:48 Jeśli f.a.l zabierze głos w tym temacie to spodziewaj się, że się doczepi do zmiennych globalnych, ale no ja pójdę trochę innym torem :)
Wyobraź sobie, że Twój program jest uruchamiany na dysku sieciowym z którego korzysta kilku użytkowników jedocześnie. Otwierając plik do zapisu na samym początku aplikacji de'facto blokujesz możliwość zapisu każdemu innemu użytkownikowi. Jeśli uzyskujesz dostęp do dysku powinno to być wykonywane w maksymalnie krótkim czasie tj. gdy klikam zapisz to: 1) otwieram plik do zapisu 2) zapisuję dane 3) zamykam plik do zapisu
Ty wykonujesz coś takiego: 1) Otwierasz plik 2) wykonujesz milion operacji niezwiązanych z plikiem 3) gdy naciśniesz klawisz 'z', zamykasz otwarty plik 4) pracujesz na zamkniętym pliku przez kolejną godzinę i dane się nie zapisują
Poczytaj lekcję z kursu na temat plików - masz tam szeroki opis co do czego służy i kilka przykładów jak z nich korzystać. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-02-08 20:32:15 Kurcze ciągle mi nie działa(dostep do pliku zabroniony)albo po odpaleniu programu zapis znika. Może mi ktoś napisać krótki program który działa by tak: [1]-Zapisz [2]-Wczytaj I jak jeden to zapisuje potem jak wyloncze program i go wloncze spowrotem i dam wczyt to niech wczyta? Zależy mi na tym bo tak nie dokończę programu o strukturach... :( Edit///////////// Ok już sobie poradziłem |
|
pekfos |
» 2010-02-08 21:12:46 void zapisz( char a, const char * s ) { fstream plik( s, ios::out ); plik.write( & a, 1 ); plik.close(); } char wczytaj( const char * s ) { fstream plik( s, ios::in ); char b; plik.read( & b, 1 ); plik.close(); return b; } int main() { char b; cout << "podaj i zapisz lub wczytaj znak" << endl; switch( getch() ) { case 'z': cout << "kliknij co" << endl; b = getch(); zapisz( b, "gdzies.txt" ); break; case 'w': cout << "wczytano to: " << wczytaj( "gdzies.txt" ); break; } cout << "i tyle" << endl; getch(); return 0; } taki prosty przykład //edit: za późno.. |
|
« 1 » |