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

Pętla w menu do{} while

Object Storage Arubacloud
+1 głos
1,172 wizyt
pytanie zadane 20 kwietnia 2017 w C i C++ przez Daniel Janus Nowicjusz (150 p.)

Witam
Chciałbym zrobić pętle do while, a w niej dwa switche, niestety nie potrafię tego ogarnąć bo pętla owszem działa ale w obrębie ostatniego casea w drugim switchu, nie wraca do początku.
Możliwe że popełniam trywialny błąd ale dopiero zaczynam przygodę i nie wszystko jest takie oczywiste :/
https://pastebin.com/5AnAntcL
 

#include <iostream>
int main()
{
    char W;
    std::cout << "Podaj plan treningowy, A lub B \n";
    do
        {
        char PT;
        std::cin >> PT;
        switch (PT)
            {
            case 'A':
                std::cout <<"BPm(1)-NPr(2)-BUb(3)-MC(4)-Br(5)\n";
                std::cout <<"Aby rozwinac skroty podaj nr 1/2/3/4/5\n";
                int cA;
                std::cin >> cA;
                switch (cA)
                    {
                    case 1:
                        std::cout <<"BPm-Pompki stojac na rekach\n";
                        std::cout <<"Aby wrocic do menu wcisnij Q";
                        std::cin >> W;
                        break;
                    case 2:
                        std::cout <<"NPr-Przysiady na jednej nodze\n";
                        std::cout <<"Aby wrocic do menu wcisnij Q";
                        std::cin >> W;
                        break;
                    case 3:
                        std::cout <<"BUb-Unoszenie rak bokiem\n";
                        std::cout <<"Aby wrocic do menu wcisnij Q";
                        std::cin >> W;
                        break;
                    case 4:
                        std::cout <<"MC-Martwy ciag\n";
                        std::cout <<"Aby wrocic do menu wcisnij Q";
                        std::cin >> W;
                        break;
                    case 5:
                        std::cout <<"Br-Brzuszki z nogami w gorze\n";
                        std::cout <<"Aby wrocic do menu wcisnij Q";
                        std::cin >> W;
                        break;
                    }
                    break;
            case 'B':
                std::cout <<"KPj(1)-PPd(2)-KDp(3)-BUg(4)\n";
                std::cout <<"Aby rozwinac skroty podaj nr 1/2/3/4\n";
                int cB;
                std::cin >> cB;
                switch (cB)
                    {
                    case 1:
                    std::cout <<"KPj-Pompki na jednej rece\n";
                    std::cout <<"Aby wrocic do menu wcisnij Q";
                    std::cin >> W;
                    break;
                    case 2:
                    std::cout <<"PPd-Podciaganie na drazku\n";
                    std::cout <<"Aby wrocic do menu wcisnij Q";
                    std::cin >> W;
                    break;
                    case 3:
                    std::cout <<"KDp-Dipsy\n";
                    std::cout <<"Aby wrocic do menu wcisnij Q";
                    std::cin >> W;
                    break;
                    case 4:
                    std::cout <<"BUg-Uginanie ramienia\n";
                    std::cout <<"Aby wrocic do menu wcisnij Q";
                    std::cin >> W;
                    break;
                    }
                break;
            }
        }
    while (W =='Q');
    system ("pause");

 

3 odpowiedzi

+1 głos
odpowiedź 20 kwietnia 2017 przez BlackMoon Obywatel (1,730 p.)

Nie do końca rozumiem z czym masz problem...

Po wpisaniu wielkiej litery "Q" pętla wykonywana jest ponownie, w przeciwnym wypadku program się kończy.

Osobiście zrobiłbym to nieco inaczej, ale kierując się twoją inicjatywą proponuję:

 

Przed int main() umieściłbym "using namespace std;". Ta przestrzeń nazw pozwoli ci pisać cin i cout bez przedrostka std:: (z tego co widzę sporo std:: napisałeś, a można było w ten sposób to ominąć)

#include <iostream>

using namespace std; //Umieszczam tu przestrzeń nazw

int main()
{
	char W;
	
	do
	{
		cout << "Podaj plan treningowy, A lub B \n"; //Teraz nie muszę już za każdym razem pisać std::cout<<

Jak również pewnie zauważyłeś przeniosłem zapytanie o podanie planu treningowego do pętli, przez co po każdym powrocie do menu wyświetli się ono ponownie.

Na koniec proponuję użyć również system("cls"); co wyczyści konsolę i sprawi, że korzystanie z programu będzie o wiele bardziej czytelne i wygodne.

switch (cA)
			{
			case 1:
				cout << "BPm-Pompki stojac na rekach\n";
				cout << "Aby wrocic do menu wcisnij Q: ";
				cin >> W;
				system("cls");
				break;

Tak czy siak, świetny pomysł by przećwiczyć sobie switcha. Good job wink

1
komentarz 20 kwietnia 2017 przez unknown Nałogowiec (39,560 p.)

Przed int main() umieściłbym "using namespace std;"

Głupi pomysł. 

–1 głos
odpowiedź 20 kwietnia 2017 przez Programeł Gaduła (3,500 p.)
Nie chce nic mówić ale troche tutaj namąciłeś ... :P

Radze ci na razie nauczyć się instrukcji if i tworzenia własnej funkcji a później wrócić znów do tego zadania ;)
–2 głosów
odpowiedź 20 kwietnia 2017 przez Antero00 Gaduła (3,670 p.)
Zapomniałeś o nawiasach klamrowych, jeśli "case" ma więcej niż jedną instrukcję.
komentarz 20 kwietnia 2017 przez BlackMoon Obywatel (1,730 p.)
W case nie trzeba używać nawiasów klamrowych. Jedyne co trzeba to pamiętać aby na końcu wszystkich instrukcji umieścić słowo kluczowe "break;"

Podobne pytania

0 głosów
1 odpowiedź 101 wizyt
pytanie zadane 10 stycznia 2023 w C i C++ przez Rykez Początkujący (250 p.)
+1 głos
2 odpowiedzi 170 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Irish Nowicjusz (130 p.)
0 głosów
1 odpowiedź 359 wizyt
pytanie zadane 22 października 2020 w C i C++ przez Reshian77 Nowicjusz (150 p.)

92,536 zapytań

141,377 odpowiedzi

319,455 komentarzy

61,922 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...