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 »  |