zapis do pliku ;/

0

Witam,
Próbuję zrobić zapis do pliku statystyk z mojej gry.
W kodzie robię coś takiego:

  std::fstream plik;
    plik.open("statystyki.txt", std::ios::in | std::ios::out );
 plik<<"etap pierwszy";  
 plik.close();  

Oczywiście dołączam też bibliotekę odpowiednią #include <fstream>

Potrafi ktoś wyjaśnić dlaczego to nie działa tak jak bym chciała?

0

A konkretnie co nie działa?

0

Już się z tym uporałam, nie widziało mi biblioteki.
Teraz mam kolejny, bardziej skomplikowany problem (oczywiście w miejscu kropek są nieistotne dla problemu fragmenty kodu):

 
.........
#include <fstream>
..........
 std:: ofstream plik;
...............
int ff()
{
//tu jest sobie jakaś funkcja, którą w programie wywołuję wielokrotnie. 
//w funkcji jest przełącznik switch
......
case KEY_HOME:
plik.close(); //chcę by w tej sytuacji plik się zamykał
}

int main()
............
plik.open("statystyki.txt");
    
      plik<<"Statystyki gracza "<<imie<<"\n";  
//tu gdzieś pojawia się pierwsze wywołanie funkcji
ff();

To taki zarys problemu jaki mam. Niestety, pliku mi nie zamyka, przez co nie zapisuje mi żadnej wartości do niego. Co robić??

0

Na końcu maina zamknij plik.

0

Niestety tak nie mogę :/

Problem wygląda tak:

tworzę plik
tworzę funkcję sterującą
w funkcji sterującej jest opcja kliknięcia end,
jeśli end wyświetla się ekran, by uruchomić grę raz jeszcze
jeśli gracz natomiast przejdzie etap, to trafia do następnego
a etapy są w mainie, za każdym razem wywołuję funkcję sterującą

Czyli na 'chłopski rozum' można by stwierdzić, że program w ogóle nie dociera do swojego końca w sytuacji, gdy nie przejdzie się wszystkich etapów ;/

Więc muszę plik zamykać w tej funkcji

0

No to może spróbuj zamknąc plik na końcu maina, jeśli nie był zamknięty ... Bo mi się zdaje, że nie zapisuje właśnie dlatego,często tak jest ... :)

0

Spróbowałam go zapisać w każdym możliwym miejscu na końcu maina i nic to nie daje. Program mi bowiem ze swoim działaniem po prostu nie dociera do tego miejsca

0

Hmm,
Może mój kod wrzucę, z pousuwanymi nieistotnymi elementami:

#include <cstdlib>
#include <fstream>
#include <iostream>
#include <curses.h>

 std:: ofstream plik;


int ster()
{ gotowe=0;
 
  while ((klawisz != ERR )&&(gotowe<max)) {
  klawisz=getch();
		switch (klawisz) {
			case KEY_UP:
              
				//bla
				
			case KEY_DOWN:
  
              //blabla
                 
            case KEY_LEFT:
               
             //bla bla

            case KEY_RIGHT:
              
                //bla bla

                continue; 
                case KEY_END:       // w razie bledu
                { 
//TU MA MI ZAMKNĄĆ PLIK
                   clear();
                   move(8,8);
                   attron(A_BOLD);
                   printw("Przegrales! Uruchom gre raz jeszcze!\n\n"); 
                   printw("W pliku statystyki.txt znajdziesz najwazniejsze informacje dotyczace Twojej rozgrywki."); 
                   attroff(A_BOLD); 
                } 
   default:
        move(20,20);
         printw("BLAD");
         }}}
         move(20,20);
         printw("Brawo! Ukonczyles etap! Nacisnij enter");
refresh();
getchar();          
 }

int main()

{
   
    initscr();
    keypad(stdscr, true);//mozliwosc korzystania ze strzalek, funkcyjnych itp
    if(has_colors()==TRUE) //czy konsola obsluguje kolory
    {
  //......
  //ruszamy strzalka
  
  klawisz=getch();
  
  while ((klawisz != ERR )&&(klawisz!=0xa)) {

		switch (klawisz) {
			case KEY_UP:
				if (wybor == 1) {
					
//itd itp itd itp zwykle klasyczne menu
   


	if (wybor==1) {
                              
                                     move(2,10); printw("Podaj swoje imie:");
                                  	 echo();
                                     char imie[40]; //tablica na imie
                                     getstr(imie);
                                     move(4,10);
                                    
                                     refresh();

    plik.open("statystyki.txt");
    
      plik<<"Statystyki gracza "<<imie<<"\n";  

                     
                                 
                               clear();
                               move(0,0); 
                               attron(A_BOLD);     
                               printw("Grasz jako %s. Etap pierwszy.\n", imie);
                               attroff(A_BOLD);
                               printw("Jesli popelniles blad lub chcesz przerwac rozgrywke wcisnij klawisz END.");
                               refresh();                                
                                   
   wyp(); //etap pierwszy
                                
                                //plansza
                                //sciany
                               

 ster();
                                                                   
                ////////////////////////etap drugi                     
  wyp();                                   
                                     
                            
                                   
    //etap drugi
                                
                                //plansza
                                //sciany
                              
ster();     
                                     
                                    // etapów jest 9!! z każdego się wychodzi poprzez kliknięcie END i następnie po przeczytaniu tego co w end poprzez kliknięcie 'krzyżyka'
                                                                                       
                             
                                     
                                     
                                     
                                     }}else{			
				//jesli wybrano koniec
				if (wybor==2) {
                              endwin();
                              exit(0);
                              }}} 
                              
getchar();
endwin();
exit(0);    
}





 

Jak widać zamknięcie pliku jest możliwe jedynie w end. Chcę bowiem także w tę funkcję dorzucić jeszcze dopisywanie do pliku numeru etapu itd. Czy ktoś jest w stanie mi pomóc?

0
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <curses.h>

std:: ofstream plik;

int ster()
{
    gotowe=0;
    while ((klawisz != ERR )&&(gotowe<max))
    {
        klawisz=getch();
        switch (klawisz)
        {
        case KEY_UP:
            //bla
        case KEY_DOWN:
            //blabla
        case KEY_LEFT:
            //bla bla
        case KEY_RIGHT:
            //bla bla
            continue;
        case KEY_END:       // w razie bledu
        {
//TU MA MI ZAMKNĄĆ PLIK
            clear();
            move(8,8);
            attron(A_BOLD);
            printw("Przegrales! Uruchom gre raz jeszcze!\n\n");
            printw("W pliku statystyki.txt znajdziesz najwazniejsze informacje dotyczace Twojej rozgrywki.");
            attroff(A_BOLD);
        }
        default:
            move(20,20);
            printw("BLAD");
        }
    }
}
move(20,20);
printw("Brawo! Ukonczyles etap! Nacisnij enter");
refresh();
getchar();
}

int main()
{
    initscr();
    keypad(stdscr, true);//mozliwosc korzystania ze strzalek, funkcyjnych itp
    if(has_colors()==TRUE) //czy konsola obsluguje kolory
    {
        //......
        //ruszamy strzalka
        klawisz=getch();
        while ((klawisz != ERR )&&(klawisz!=0xa))
        {
            switch (klawisz)
            {
            case KEY_UP:
                if (wybor == 1)
                {
//itd itp itd itp zwykle klasyczne menu
                    if (wybor==1)
                    {
                        move(2,10);
                        printw("Podaj swoje imie:");
                        echo();
                        char imie[40]; //tablica na imie
                        getstr(imie);
                        move(4,10);
                        refresh();
                        plik.open("statystyki.txt");
                        plik<<"Statystyki gracza "<<imie<<"\n";
                        clear();
                        move(0,0);
                        attron(A_BOLD);
                        printw("Grasz jako %s. Etap pierwszy.\n", imie);
                        attroff(A_BOLD);
                        printw("Jesli popelniles blad lub chcesz przerwac rozgrywke wcisnij klawisz END.");
                        refresh();
                        wyp(); //etap pierwszy
                        //plansza
                        //sciany
                        ster();
                        ////////////////////////etap drugi
                        wyp();
                        //etap drugi
                        //plansza
                        //sciany
                        ster();
                        // etapów jest 9!! z każdego się wychodzi poprzez kliknięcie END i następnie po przeczytaniu tego co w end poprzez kliknięcie 'krzyżyka'
                    }
                }
                else
                {
                    //jesli wybrano koniec
                    if (wybor==2)
                    {
                        endwin();
                        exit(0);
                    }
                }
            }
            getchar();
            endwin();
            exit(0);
        }

samo sformatowanie tego kodu wskazuje na jakieś problemy...

0

Co masz na myśli? Wyjaśniłam przecież, że wycięłam z kodu nieistotne fragmenty, by tylko przedstawić zarys problemu.

0

Przed każdym exit(0); wrzuć

 if(plik.is_open())plik.close();

1 użytkowników online, w tym zalogowanych: 0, gości: 1