C++ czyszczenie ekranu i powrót do menu

Witam, chcę zrobić program z menu, który po wykonaniu zadanej czynności czyści ekran i wraca do menu.

Wymyśliłem coś takiego:

#include 

#include 

using namespace std;

void menu()

{



	cout << "Menu"<< endl<
	cout << "1: dodawanie"<
	cout << "2: odejmowanie"<
	cout << "3: mnożenie" << endl;

	cout << "4: wyjscie" << endl;


}

int main()

{

int wybor;




menu();

cout<< endl;

cout << "Wybor: ";

cin>>wybor;

switch (wybor)

{

	case 1:

		int dodawanie,a,b;

		cout << "Podaj pierwsza liczbe ";

		cin >> a;

		cout << "Podaj druga liczbe: ";

		cin >> b;

		dodawanie = a+b;

		cout << "Wynik: " << dodawanie;

		break;


	case 2:

		int odejmowanie,c,d;

		cout << "Podaj pierwsza liczbe: ";

		cin >> c;

		cout << "Podaj druga liczbe: ";

		cin >> d;

		odejmowanie = a-b;

		cout << "Wynik: " << odejmowanie;

		break;


	case 3:

		int e,f,mnozenie;

		cout << "Podaj pierwsza liczbe: ";

		cin >>e;

		cout << "Podaj druga liczbe: ";	

		cin >> f;

		mnozenie = e*f;

		cout << "Wynik: " << mnozenie;

		break;	


	case 4:

		return 0;

		break;	

}


char q,powrot;

cout << "q: powrot do menu ";

cin >> powrot;

if (powrot=q)

{

system ("CLS");

	menu();


}

else 

cout << "Wcisnieto nieprawidlowy klawisz";



return 0;

}

Problem w tym, że niestety program tak jakby ignornuje instrukcję if i po naciśnięciu q konsola wywala info, że program został pomyślnie zakończony i aby zamknąć konsolę należy wcisnąć dowolny klawisz. Ktoś ma pomysł jak to ugryźć? Nie wiem czemu, ale przy pierwszym case’ie program działał, dopisałem 3 pozostałe i się wysypał… :frowning:

if((powrot=='q')||(powrot=='Q'))

Niestety nie działa. Tak samo wyświetla menu i nie pytając o wybór wywala Process exited with return value 0

Press any key to continue . . .

Działa dokładnie tak jak zostało to zaimplementowane.

Program wykonał jakieś działanie i jesteśmy w stanie kiedy sprawdzamy zmienną powrót:

if((powrot=='q')||(powrot=='Q'))

{

system ("CLS");

   menu();

}

wywołanie funkcji menu wypisuje Twoje menu. I jaka jest następna instrukcja?

return 0;

czyli zakończenie programu.

Jeśli chcesz zapętlić wywołanie programu musisz użyć instrukcji pętli while lub do while

przed:

cin >> powrot;

daj:

cin.sync();

Dalej to samo.

Twoja funkcja menu tylko wyświetla tekst. Albo powtarzasz wszystko while, albo pobierasz zmienną i wykonujesz to co chcesz w funkcji (wywołujesz w kółko).

#include 

#include 

using namespace std;

void menu()

{

   cout << "Menu"<< endl<
   cout << "1: dodawanie"<
   cout << "2: odejmowanie"<
   cout << "3: mnożenie" << endl;

   cout << "4: wyjscie" << endl << endl;

}

int main()

{

int wybor;

while(1){

  system("cls");

  menu();

  cout << "Wybor: ";

  cin>>wybor;


  switch (wybor)

  {

     case 1:

        int dodawanie,a,b;

        cout << "Podaj pierwsza liczbe ";

        cin >> a;

        cout << "Podaj druga liczbe: ";

        cin >> b;

        dodawanie = a+b;

        cout << "Wynik: " << dodawanie;

        break;


     case 2:

        int odejmowanie,c,d;

        cout << "Podaj pierwsza liczbe: ";

        cin >> c;

        cout << "Podaj druga liczbe: ";

        cin >> d;

        odejmowanie = a-b;

        cout << "Wynik: " << odejmowanie;

        break;


     case 3:

        int e,f,mnozenie;

        cout << "Podaj pierwsza liczbe: ";

        cin >>e;

        cout << "Podaj druga liczbe: ";   

        cin >> f;

        mnozenie = e*f;

        cout << "Wynik: " << mnozenie;

        break;   


     case 4:

        return 0;

        break; 

    default: cout << "zly klawisz\n\n";

}}}

Wywaliłem kod z funkcją bo się zapętlał :slight_smile:

drobok , robiłem w ten sposób i efekt jest taki, że nie widać wyniku, ponieważ się kasuje, dlatego dałem if i zaprogramowałem na q powrot i czyszczenie.

W sumie nie pomyślałem o tym.

Po default daj:

cin.sync();cin.get(); //(oczekiwanie na naciśnięcie klawisza)

I wywal break, powinno działać.

Dalej kasuje…

#include

Teraz działa. Bardzo Ci dziękuje. Mam prośbę, mógłbyś mi wyjaśnić co robi cin.sync() i cin.get()? Ten program jest do szkoły na pracę domową, tak więc wolę wiedzieć, na wypadek jakby nauczyciel chciał mnie sprawdzić czy ja pisałem program i zapytał o te dwie instrukcje.

Synchronizacja z źródłem wejścia, oraz pobranie znaku.

W sumie mnie o takie rzeczy nie pytaj. Jak bardzo nie chcesz tego użyć, pozostaje ci system(“pause”)

To nie o to chodzi, jest ekstra, ale wiesz - chodzi o to, że nauczyciel zobaczy w kodzie coś, czego z nim nie przerabiałem i może zarzucić mi, że program nie zrobiłem sam, tylko zrobił go ktoś mądrzejszy ode mnie, ewentualnie jakiś doświadczony programista, a tak nie zarzuci mi tego.

system wprowadza ci to co w niej wpiszesz to środowiska,w twoim przypadku do konsoli (wszystkie polecenia z konsoli możesz sobie za pomocą te funkcji w programie). Tam możesz napisać praktycznie to co w samym c :))

A co do funkcji ponadprogramowych to sam coś o tym wiem. Na szczęście teraz już tak nie mam :slight_smile:

No, niestety mam dość ciętego nauczyciela pod tym względem… W sumie to przypuszczam, że jemu to nawet chodziło o powrót bez czyszczenia ekranu, ale jako że bardzo podszedł mi ten język, postanowiłem podnieść sobie poprzeczkę i przy okazji nauczyć się czegoś. Swoją drogą było to dla mnie cenne doświadczenie, ponieważ po drodze zetknąłem się z problem z którym nie koniecznie bym sobie poradził i dowiedziałem się, jak sobie można poradzić. Szczerze mówiąc, to zacząłem się zastanawiać, czy w ogóle jest to wykonalne, ale w końcu doszedłem do wniosku, że musi być, bo w końcu jakby nie było w programowaniu praktycznie nie ma rzeczy niemożliwych i doszedłem do wniosku, że jest to kwestia drobnej modyfikacji kodu i zaskoczy…

Zniszcze ci świat :smiley:

Nie da się napisać programu, który dla każdego innego programu powie, czy ów program się zatrzyma czy też nie.

Nie zniszczyłeś, ponieważ napisałem praktycznie. Doskonale sobie zdaję sprawę, że nie wszystko da się przedstawić komputerowi w sposób dla niego zrozumiały…

A nie da się przypadkiem po dekompilacji ?

http://informatyka.wroc.pl/node/192 :stuck_out_tongue: