• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed problem za zapisem informacji do pilku w c++

Object Storage Arubacloud
0 głosów
341 wizyt
pytanie zadane 1 kwietnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 2 kwietnia 2017 przez Jakub 0

hej , już prawie kończę pisać prostą konsolową grę w c++ . Zależy mi żeby program zapisywał do pliku nowe rekordy , informował o ich pobiciu itp . Problem jest taki że program odczytuje informacje z dokumentu poprawnie (i powiadamia o pobiciu rekordu) ale nie zapisuje nowych rekordów , czyli wartości nie zostaną zapełnione nowymi .

Na dole podałem funkcje odpowiadającą za te instrukcje bo całego kodu nie ma sensu wrzucać , zwłaszcza że jest podzielony na parę plików :) , Dziękuje za wszelka pomoc , na dole podałem funkcje :

 

fstream file; //plik
int number_with_file; //wynik zawarty w pliku 

int points = 0; //punkty zbierane w grze / dodawanie ich dziala ok

void game::points_return()
{
    cout<<"                          suma zdobytych punktow : "<<points<<endl;

    file.open("game_records.txt",ios::in);

    if(file.good()==false)
    {
        cout<<"error"<<endl; //jeżeli pliku nie ma 
        exit(0);
    }
    else //jezeli plik jest
    {
        string line; ..linia pliku 
        int line_number = 1;//numer lini 

        while(getline(file,line))
        {
            switch(line_number)
            {
                case 1: number_with_file=atoi(line.c_str()); break; //konwersja 
            }
        }

        if(points>number_with_file)//warunek czy nie został pobity rekord 
        {
            cout<<"Brawo ! "<<endl; //do działa ...

            file.open("game_records.txt",ios::out); //otwieranie w trybie do zapisu
            file<<points; //to nie działa :(
        }
    }

    file.close();

    points=0; //zerowanie na koniec punktów bo gra jest zapętlona 
}

 

komentarz zamknięcia: już znam odpowiedź
komentarz 1 kwietnia 2017 przez Jakub 0 Pasjonat (23,120 p.)

dodawanie punktów itp działa poprawnie , wiem że powód dlaczego to nie działa może być blachyindecision Jak będzie trzeba to wrzucę link do całego kodu i programu

1
komentarz 2 kwietnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Jeśli problem rozwiązany pasuje zamknąć temat :)
komentarz 2 kwietnia 2017 przez Jakub 0 Pasjonat (23,120 p.)

ej ,czemu zgłosiliście to pytanie  ? sad

1
komentarz 2 kwietnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Przez przypadek xD

Spokojnie - wycofałem :D

3 odpowiedzi

+1 głos
odpowiedź 1 kwietnia 2017 przez tangarr Mędrzec (154,860 p.)
wybrane 2 kwietnia 2017 przez Jakub 0
 
Najlepsza

Zamknij plik zanim go otworzysz do zapisu.
http://www.cplusplus.com/reference/fstream/fstream/open/
" If the stream is already associated with a file (i.e., it is already open), calling this function fails. "

1
komentarz 1 kwietnia 2017 przez WireNess Stary wyjadacz (11,240 p.)

LINIA 10: Otworzyłeś plik do odczytu!

LINIA 39: Zamknąłeś plik do odczytu!

 

LINIA 34: Otworzyłeś plik do zapisu w pliku do odczytu, ponadto brak zamknięcia tego pliku. Dodam jeszcze iż używasz file do otworzenia pliku zarówno do odczytu jak i do zapisu!

 

WNIOSEK: Zamknięcie pliku z 39 lini przenieś przed linie 34! Zamknij plik z linii 34! Oraz zmień tą linie: 

file.open("game_records.txt",ios::out);

W taki sposób: 

file.open("game_records.txt",ios::out | ios::app);

 

Spokojnej nocy życzę i pozdrawiam :)

 

+1 głos
odpowiedź 1 kwietnia 2017 przez Evelek Nałogowiec (28,960 p.)
W 10 wierszu otwierasz plik a następnie w 34 znowu go otwierasz tyle, że w innym trybie - file.close() najpierw.
0 głosów
odpowiedź 1 kwietnia 2017 przez WireNess Stary wyjadacz (11,240 p.)

LINIA 10: Otworzyłeś plik do odczytu!

LINIA 39: Zamknąłeś plik do odczytu!

 

LINIA 34: Otworzyłeś plik do zapisu w pliku do odczytu, ponadto brak zamknięcia tego pliku. Dodam jeszcze iż używasz file do otworzenia pliku zarówno do odczytu jak i do zapisu!

 

WNIOSEK: Zamknięcie pliku z 39 lini przenieś przed linie 34! Zamknij plik z linii 34! Oraz zmień tą linie

	
file.open("game_records.txt",ios::out);

W taki sposób:

file.open("game_records.txt",ios::out | ios::app);

 

 

Spokojnej nocy życzę i pozdrawiam :)

komentarz 2 kwietnia 2017 przez Jakub 0 Pasjonat (23,120 p.)
dzięki (głupi błąd) , aczkolwiek ios::app na będę używać bo chce zastąpić wynik a nie dopisywać :)
1
komentarz 2 kwietnia 2017 przez WireNess Stary wyjadacz (11,240 p.)
Ale pomogło? :D
komentarz 2 kwietnia 2017 przez Jakub 0 Pasjonat (23,120 p.)

Tak , dzięks wink

Podobne pytania

0 głosów
2 odpowiedzi 457 wizyt
0 głosów
1 odpowiedź 1,214 wizyt
0 głosów
2 odpowiedzi 367 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez Agresorek Początkujący (290 p.)

92,584 zapytań

141,434 odpowiedzi

319,670 komentarzy

61,967 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...