C++ Problem z wyświetlaniem z pliku

Witam

mam taki problem : otóż jest sobie program, który tworzy bazę danych w pliku txt.

Wszystkie funkcje działają jak należy, tylko po skompilowaniu, gdy wybiorę opcję, że chcę jeszcze raz wyświetlić menu, i wtedy wybiorę którąkolwiek opcję z menu, to wychodzą bzdury (np. wyświetla dane dobrze, ale gdy wcisnę “t”, aby zobaczyć menu jeszcze raz, i wtedy znów kliknę na wyświetlanie, to program wyświetla tylko jedną, pustą linijkę zamiast zawartości pliku. Inny przykład - za pierwszym razem poprawnie zapisuje dane do pliku, za kolejnym już wogóle nie zapisuje).

Oto kod :

#include

#include

#include

#include


using namespace std;


string marka,model,napis,slowo,moc,rocznik,przebieg,pojemnosc;

char decyzja;

short int wybor;


class samochod

{

      public:

             string marka;

             string model;

             string przebieg;

             string moc;

             string rocznik;

             string pojemnosc;


};


    samochod a;

    fstream plik;

    fstream plik2;


void dodawanie()

{

     cout<<"Podaj marke samochodu\n";

     cin>>a.marka;

     cout<<"Podaj model samochodu\n";

     cin>>a.model;

     cout<<"Podaj przebieg\n";

     cin>>a.przebieg;

     cout<<"Podaj moc w KM\n";

     cin>>a.moc;

     cout<<"Podaj rocznik\n";

     cin>>a.rocznik;

     cout<<"Podaj pojemnosc\n";

     cin>>a.pojemnosc;

     cout<<"Dodaje...\n";

     _sleep(1000);

     plik.open("save.txt",ios::app|ios::out);

     if(plik.is_open()==true)

     {

          plik<
          plik<
          plik<
          plik<
          plik<
          plik<
          plik.close();                 

     }

     else

     cout<<"Nie udalo sie otworzyc\n";

}


void wyswietlanie()

{

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

     if(plik.is_open()==true)

     {


       plik>>a.marka;

       plik>>a.model;

       plik>>a.przebieg;

       plik>>a.moc;

       plik>>a.rocznik;

       plik>>a.pojemnosc;


      while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.

      {

          cout<<"Marka : "<
          plik>>a.marka;

          plik>>a.model;

          plik>>a.przebieg;

          plik>>a.moc;

          plik>>a.rocznik;

          plik>>a.pojemnosc;


      }

      plik.close(); 

     }

     else

     cout<<"Nie udalo sie otworzyc\n";

}


void usuwanie()

{

     cout<<"Podaj marke, model, rocznik i pojemnosc.\nTen samochod bedzie usuniety\n\n";

     cout<<"Marka :\n";

     cin>>marka;

     cout<<"Model :\n";

     cin>>model;

     cout<<"Rocznik :\n";

     cin>>rocznik;

     cout<<"Pojemnosc :\n";

     cin>>pojemnosc;

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

      plik2.open("savetemp.txt",ios::app|ios::out);

     if(plik.is_open()==true && plik2.is_open()==true)

     {

        plik>>a.marka;

        plik>>a.model;

        plik>>a.przebieg;

        plik>>a.moc;

        plik>>a.rocznik;

        plik>>a.pojemnosc;



      while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.

      {

      if(a.marka==marka && a.model==model && a.rocznik==rocznik && a.pojemnosc==pojemnosc)

      {

          cout<<"Znaleziono taki pojazd, usuwam...\n";              

          goto dalej;

      }

      else 

      {

          plik2<
          plik2<
          plik2<
          plik2<
          plik2<
          plik2<
      }   

          dalej:     

          plik>>a.marka;

          plik>>a.model;

          plik>>a.przebieg;

          plik>>a.moc;

          plik>>a.rocznik;

          plik>>a.pojemnosc;


      } 

      plik.close();   

      plik2.close();  

     }

     else

     cout<<"Nie udalo sie otworzyc\n";



      remove("save.txt");

      rename("savetemp.txt","save.txt"); 


}



void szukaj()

{

      cout<<"Podaj slowo jakie chcesz wyszukac\n";

      cin>>slowo;

      clrscr();

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

     if(plik.is_open()==true)

     {

        plik>>a.marka;

        plik>>a.model;

        plik>>a.przebieg;

        plik>>a.moc;

        plik>>a.rocznik;

        plik>>a.pojemnosc;


      while(!plik.eof()) //eof() - Funkcja ta służy do sprawdzania, czy wskaźnik pliku znajduje się na końcu pliku.

      {

      if(a.marka==slowo || a.model==slowo || a.przebieg==slowo || a.moc==slowo || a.rocznik==slowo || a.pojemnosc==slowo)

      {

          cout<<"Marka : "<
      }

          plik>>a.marka;

          plik>>a.model;

          plik>>a.przebieg;

          plik>>a.moc;

          plik>>a.rocznik;

          plik>>a.pojemnosc;

      } 

      plik.close();  

     }

     else

     cout<<"Nie udalo sie otworzyc\n";    

}


int main()

{

    do{

    clrscr();

    cout<<"Menu\n\n";

    cout<<"1 - dodawanie\n";

    cout<<"2 - usuwanie\n";

    cout<<"3 - wyszukiwanie\n";

    cout<<"4 - wyswietlanie\n";

    cout<<"5 - koniec\n\n";

    cout<<"Podaj swoj wybor\n";

    cin>>wybor;

    switch(wybor)

    {

      case 1:

           {

              clrscr();

              dodawanie();

              break; 

           }

      case 2:

           {

              clrscr();

              usuwanie();

              break; 

           }

      case 3:

           {

              clrscr();       

              szukaj();

              break; 

           }

      case 4:

           {

              clrscr();

              wyswietlanie();

              break; 

           }

      case 5:

           {

              return 0;

              break; 

           }

      }


      cout<<"\nCzy chcesz powtorzyc (n/t)?\n";

      cin>>decyzja;

      }while(decyzja!='n');

      system("PAUSE");

      return 0;

}


      // getline(plik,napis);

      // cout<

przed:

plik.close();

lub przed:

plik.open(…);

daj:

plik.clear();

Dzięki wielkie :wink: !!

Nie było by tych problemów gdyby nie używałeś bez sensu zmiennych globalnych.

Które zmienne globalne powodują takie błędy?

PS. Jak zrobić pełny ekran (nie kombinacją klawiszy, tylko jakoś w programie) w konsoli?

Oczywiście że ta której flagi musiałeś czyścić za pomocą

plik.clear();

czyli:

fstream plik;

Jeżeli chodzi ci o windows to: SetConsoleDisplayMode()