C++ czyszczenie ekranu i powrót do menu


(Piotrkijak) #1

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:


([alex]) #2
if((powrot=='q')||(powrot=='Q'))

(Piotrkijak) #3

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 . . .


(Grzelix) #4

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


([alex]) #5

przed:

cin >> powrot;

daj:

cin.sync();


(Piotrkijak) #6

Dalej to samo.


(Drobok) #7

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:


(Piotrkijak) #8

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.


(Drobok) #9

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ć.


(Piotrkijak) #10

Dalej kasuje...


(Drobok) #11
#include

(Piotrkijak) #12

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.


(Drobok) #13

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")


(Piotrkijak) #14

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.


(Drobok) #15

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:


(Piotrkijak) #16

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...


(kostek135) #17

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.


(Piotrkijak) #18

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...


(Drobok) #19

A nie da się przypadkiem po dekompilacji ?


(Rolek0) #20

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