zapis/odczyt z pliku tekstowego
Ostatnio zmodyfikowano 2017-11-15 17:16
Bunzio Temat założony przez niniejszego użytkownika |
zapis/odczyt z pliku tekstowego » 2017-11-14 18:30:15 Witam, męczę się już z tym problemem od kilku dni a mianowicie napisałem grę oraz jedną z funkcji miały być statystyki. Zapis do pliku odbywa się prawidłowo natomiast problem pojawia się przy wypisaniu danych z pliku na monitor, wyświetlają się podwójnie. #include <stdio.h> #include <tchar.h> #include <iostream> #include <Windows.h> #include <cstdlib> #include <ctime> #include <fstream> #include <string> using namespace std; string nick; int attempts = 0; void statsave() { fstream statystyki; statystyki.open( "statystyki.txt", ios::out | ios::app ); statystyki << nick << endl; statystyki << attempts << endl; statystyki.close(); } void statread() { fstream statystyki; statystyki.open( "statystyki.txt", ios::in ); if( statystyki.good() == false ) { cout << "Blad wczytywania."; statystyki.close(); } string linia; int nrlini1 = 1; int nr_lini = 1; cout << " STATYSTYKI\n"; while( getline( statystyki, linia ) ) { if( nr_lini > 2 ) nr_lini = 1; switch( nr_lini ) { case 1: nick = linia; break; case 2: attempts = atoi( linia.c_str() ); break; } cout << nrlini1 << ".Nick: " << nick << " Proby: " << attempts << endl; nr_lini++; nrlini1++; } statystyki.close(); } void game() { srand( time( NULL ) ); int number =( rand() % 1001 ) + 1; int guess = 0; cout << "Podaj swoj nick: "; cin >> nick; cout << "Wylosowano liczbe z przedzialu od 1 do 1000\n"; while( number != guess ) { attempts++; cout << "Aby zakonczyc dzialanie programu zgadnij liczbe: "; cin >> guess; if( guess > number ) cout << "Podano zbyt duza liczbe" << endl; if( guess < number ) cout << "Podano zbyt mala liczbe" << endl; } cout << "\n\n\nBrawo zgadles liczbe !\n"; cout << " Ilosc prob: " << attempts << endl; statsave(); } int main() { int chois; while( true ) { cout << "Witaj w grze zgadnij liczbe by bunzio\n"; cout << "_________________________________________\n\n"; cout << "[1]Graj\n" << "[2]Statystyki\n" << "[3]Wyjscie\n"; cin >> chois; switch( chois ) { case 1: game(); break; case 2: statread(); break; case 3: exit( 0 ); break; } system( "PAUSE" ); system( "cls" ); } return 0; } |
|
ParseThisCode |
» 2017-11-14 19:15:58 Skoro co druga linia to ilość prób to po co Ci ten if i switch? Można tak: std::string attempts; while( getline( statystyki, nick ) ) { getline( statystyki, attempts ); cout << nrlini1 << ".Nick: " << nick << " Proby: " << attempts << endl; nrlini1++; }
A tutaj zamykasz plik, który nie istnieje. Poza tym dalej następuje próba odczytania pliku: if( statystyki.good() == false ) { cout << "Blad wczytywania."; statystyki.close(); }
Zrób tak: if( !statystyki ) { cout << " Blad wczytywania." << endl; return; }
Brak zabezpieczenia przed wprowadzeniem liter/słów. Można tak: |
|
Bunzio Temat założony przez niniejszego użytkownika |
» 2017-11-15 17:16:31 Dzięki wielkie za uwagi i pomoc, można zamknąć. |
|
« 1 » |