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

C++ Zapis znika po wyłączeniu programu.

Ostatnio zmodyfikowano 2010-02-08 21:12
Autor Wiadomość
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;
C/C++
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;
   
   
}
P-13648
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:
C/C++
case 'z':
{
    fstream plik;
    plik.open(...);
    if...
    plik <<...
    plik.clear();
}
Tak samo w przypadku odczytywania danych.
P-13650
DejaVu
» 2010-02-08 17:05:31
Daj cały program - ten fragment nie ma prawdopodobnie nic wspólnego z opisanym problemem.
P-13651
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.


C/C++
#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 );
}
P-13655
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ć.
P-13660
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
P-13672
pekfos
» 2010-02-08 21:12:46
C/C++
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..
P-13677
« 1 »
  Strona 1 z 1