Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapisywanie treści wypisanej przez funkcję void() na konsole do pliku.

Ostatnio zmodyfikowano 2017-01-25 20:47
Autor Wiadomość
merio901
Temat założony przez niniejszego użytkownika
Zapisywanie treści wypisanej przez funkcję void() na konsole do pliku.
» 2017-01-25 07:12:53
Witam


Częścią mojego zadania przy symulacji menu jest zapisywanie całego przebiegu testowania w konsoli do pliku.
I tu pojawia się mój problem. W przypadku prostych cout'ów czy zmiennych wczytywanych w mainie wystarcza zwykly zapis przez przez file << x;  Jednak w ten sposób w pliku mogę zapisywać tylko maina, a praktycznie cały program wyświetlający menu, opiera się na funkcji void display(), która wypisuje kolejne podpięte menu i podmenu (razem z dodawanymi opcjami - wszystko indeksowane oraz nazywane podczas działania programu)

Pytanie: czy da się w jakiś sposób po prostu za jednym zamachem przechwycić wszystko co wypisała funkcja display() i wrzucić to do pliku?


C/C++
cout << "Wybierz: \n1. Dodaj menu \n2. Usun menu \n3. Dodaj opcje \n4. Usun opcje \n5. Rozwin/zwin menu. \n6. Uzyj opcji. \n7. Zmien tresc opcji. \n\n99. Zamknij program." << endl << endl;
file << "Wybierz: \n1. Dodaj menu \n2. Usun menu \n3. Dodaj opcje \n4. Usun opcje \n5. Rozwin/zwin menu. \n6. Uzyj opcji. \n7. Zmien tresc opcji. \n\n99. Zamknij program." << endl << endl;


cout << "Wybor:";
cin >> choice;
file << "Wybor:" << choice << endl;
cout << "Wybrales opcje: " << choice << endl << endl;
file << "Wybrales opcje: " << choice << endl << endl;
switch( choice )
{
case 1:
    {
        int menu_choice;
        cout << "Podaj indeks menu do ktorego chcesz dodac podmenu(GLOWNE: 1): ";
        file << "Podaj indeks menu do ktorego chcesz dodac podmenu(GLOWNE: 1): ";
        cin >> menu_choice;
        file << menu_choice << endl;
        selectedMenu = mainMenu->check_index( menu_choice ); //funckja zwracajaca wskaznik na menu ktore chce edytowac uzytkownik
        cout << "Podaj nazwe nowego menu: ";
        file << "Podaj nazwe nowego menu: ";
        string x;
        cin >> x;
        file << x << endl;
        Menu * menuItem = new Menu( x ); //stworzenie nowego menu i
        selectedMenu->add( menuItem ); //dodanie go do rodzica
        mainMenu->display(); //wyswietlenie calego, dotychczas stworzonego menu ze wszystkimi podmenu i opcjami
       
       
        file << mainMenu->display(); // nie mam pomysłu jak to zrobić
       
        break;
    }
P-156910
mokrowski
» 2017-01-25 08:08:42
Pewnie że się da. Tylko pytanie, chcesz mieć:
1. Zmianę wyświetlania tego co idzie normalnie na cout na zapis do pliku czy...
2. Ma wyprowadzić na cout i dodatkowo do pliku?
P-156911
merio901
Temat założony przez niniejszego użytkownika
» 2017-01-25 19:02:15
Raczej ten drugi punkt. Metoda display() sama w sobie jest obładowana coutami wyswietlającymi w konsoli kolejne menu/podmenu + opcje z wektorów.
Tylko jak to teraz sprawnie dodatkowo wyrzucic do pliku?
P-156934
garlonicon
» 2017-01-25 19:10:11
Przekieruj strumień za pomocą metody rdbuf.
P-156935
mokrowski
» 2017-01-25 20:33:03
Do zmiany na inne wyjście jak napisał @up wystarczy jedynie podstawić pod rdbuf() plik. Do zdwojenia jednak można dodać wrapper.
http://wklej.to/wVt4q
P-156944
merio901
Temat założony przez niniejszego użytkownika
» 2017-01-25 20:47:18
Co za wyśmienite rozwiązanie! Dzięki! Zamykam temat :)
P-156947
« 1 »
  Strona 1 z 1