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

Program nie zapisuje wyników do pliku, odczyt i zapis pliku w jednym void'dzie

Aruba Cloud - Virtual Private Server VPS
0 głosów
416 wizyt
pytanie zadane 17 grudnia 2016 w C i C++ przez Krystian Nowak Początkujący (330 p.)

Witam, piszę prosty program składający się z trzech void'ów: menu, gra, oraz tablica wyników, menu jest zwykłym przełącznikiem, tablica wyników wyświetla trzy najlepsze wyniki, natomiast gra obsługuje grę(póki co jest to tylko pytanie ile zebrało się punktów), i jeżeli wynik jest większy niż któryś z trzech wcześniej zapisanych w pliku nadpisuje go do niego w odpowiedniej kolejności, jeśli jest większy niż wszystkie zapisuje go w 1 linii i zmienia dwie pozostałe, jeśli jest większy od drugiej i trzeciej wartości, zmienia je odpowiednio, zaś jeżeli tylko od trzeciej zmienia samą trzecią. Dopóki w procedurze gra nie miałem również odczytywania wartości z pliku działało zapisywanie do niego, jednak musiałem tam i otworzyć odczytywanie wartości pliku i możliwość zapisu, ponieważ program zapisuje według określonej reguły. Bardzo proszę o pomoc w rozwiązaniu tego problemu, bez tego nie mogę pójść dalej. 

#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

int opcja;
void gra();
void menu();
void wyniki();

int main()
{

    menu();
    return 0;
}

void menu()
{
    system("cls");
    cout << "---------------------" << endl;
    cout << "1 Gra" << endl;
    cout << "2 Tablica wynikow" << endl;
    cout << "3 Wyjscie" << endl;
    cin >> opcja;
    cout<<endl;

    switch(opcja)
    {
    case 1:
    gra();
    break;
    case 2:
    wyniki();
    break;
    case 3:
    exit(0);
    break;
    }
}

void gra()
{
    system("cls");
//----------------------------------------------------------
    int pkt;
    string j, d, t;
    cout<<"Ile masz pkt? ";
    cin>>pkt;
    fstream plik;
//---------wejscie

    plik.open("punkty.txt",ios::in);

    if(plik.good()==false)
    {
        cout<<"Plik nie istnieje";
    }
    string linia;
    int nrl=1;
    while(getline(plik,linia))
    {
    switch(nrl)
    {
        case 1: j = linia; break;
        case 2: d = linia; break;
        case 3: t = linia; break;
    }

    nrl++;
    }
    plik.close();

//-----------zapisywanie
    plik.open("punkty.txt",ios::out|ios::app);

    if(pkt<t)
    {
        cout<<"zdobyles za malo pkt";
    }
    else if((pkt>j)&&(pkt>d)&&(pkt>t))
    {
        t=d;
        d=j;
        j=pkt;
    }
    else if((pkt>d)&&(pkt>t))
    {
        t=d;
        d=pkt;
    }
    else if(pkt>t)
    {
        t=pkt;
    }

    plik.close();



//-----------------------------------------------------------
    cout<<endl<<endl;
    cout<<"---------------------"<<endl;
    cout<<"1 Menu glowne"<<endl;
    cin >>opcja;
    if(opcja==1)
    {
    menu();
    }
}

void wyniki()
{
    system("cls");
//----------------------------------------------------------
    string j, d, t;
    fstream plik;
    plik.open("punkty.txt",ios::in);

    if(plik.good()==false)
    {
        cout<<"Plik nie istnieje";
    }
    string linia;
    int nrl=1;
    while(getline(plik,linia))
    {
    switch(nrl)
    {
        case 1: j = linia; break;
        case 2: d = linia; break;
        case 3: t = linia; break;
    }

    nrl++;
    }
    plik.close();
    cout<<j<<endl;
    cout<<d<<endl;
    cout<<t<<endl;
    string x="41";
    if(x>t)
    {
        cout<<"dupal";
    }
    else
    {
        cout<<"nie dupal";
    }
//-----------------------------------------------------------

    cout<<endl<<endl;
    cout<<"---------------------"<<endl;
    cout<<"1 Menu glowne"<<endl;
    cin >>opcja;
    if(opcja==1)
    {
    menu();
    }

 

komentarz 17 grudnia 2016 przez niezalogowany
Dobra teraz przejrzałem kod dokładniej i po 1. nie masz instrukcji zapisującej do pliku, po 2. sprawdzanie czy udało się otworzyć plik nie ma sensu skoro i tak niżej operujesz na pliku niezależnie od wyniku ifa. Po 3. poczytaj o zasadzie DRY :)
komentarz 17 grudnia 2016 przez Krystian Nowak Początkujący (330 p.)
Faktycznie, dzięki ogromne, tyle siedziałem i zmieniałem przy tym że stałem się ślepy, a co do otwarcia pliku, to jest po to żeby potem porównać wartości z lini w tym długim if'ie

2 odpowiedzi

0 głosów
odpowiedź 17 grudnia 2016 przez niezalogowany
Po zamknięciu pliku daj Plik.clear();
komentarz 17 grudnia 2016 przez Krystian Nowak Początkujący (330 p.)
Niestety nic to nie dało.
0 głosów
odpowiedź 17 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Wydaje mi się, że po linii 74 żadne dane nie są przekazywane do pliku.

Podobne pytania

0 głosów
3 odpowiedzi 174 wizyt
+1 głos
1 odpowiedź 461 wizyt
pytanie zadane 1 lutego 2021 w C# przez patryk8 Początkujący (300 p.)
0 głosów
1 odpowiedź 371 wizyt

93,327 zapytań

142,325 odpowiedzi

322,396 komentarzy

62,657 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...