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

question-closed Powracanie do wiersza

Object Storage Arubacloud
0 głosów
142 wizyt
pytanie zadane 7 listopada 2015 w C i C++ przez Mr. Satan Początkujący (390 p.)
zamknięte 7 listopada 2015 przez Mr. Satan

Cześć, jest jakiś prosty, ładny sposób do powracania do wiersza? Robię mały quiz i chcę, by po wartości TRUE dla zapytania można było iść do wiersza poniżej czyszczącego ekran i odpalającego grę na nowo :)

 

Znalazłem sposób goto (jakaś literka, np.x), ale ponoć to "obrzydliwa sztuczka" :D
Mnie tam generalnie takie coś pasuje, ale wiecie, im więcej się wie, tym większy ma się wybór ;)

 

 

EDIT: Zrobiłem takie coś, może dzięki temu łatwiej będzie się połapać o co chodzi.
 

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>
#include <stdio.h>

using namespace std;

int wybor, wynik=0;
string odp_0;

int main()
{

    for (;;)
    {
        cout << "MENU GLOWNE"<<endl;
        cout << "-----------"<<endl;
        cout << "1. START"<<endl;
        cout << "2. WYJSCIE"<<endl;

    wybor = getch();

        switch (wybor)
    {
        case '1':
            cout << "A wiec zaczynajmy!";
            break;

        case '2':
            {
                cout << "Moze innym razem";
                exit(0);
                break;
            }

    }
        wybor = 0;
        for (int d=0; d<=2; d++)
        {
            cout << "\a";
            Sleep(1000);
        }
        cout << endl << endl << "Pytanie pierwsze. Jesli postac kierunkowa jest ujemna, to funkcja jest... "<<endl;
        cout << "1. Stala"<<endl;
        cout << "2. Rosnaca"<<endl;
        cout << "3. Malejaca"<<endl;

    wybor = getch();

        switch (wybor)
        {
        case '1':{
            cout << "Zla odpowiedz, sproboj ponownie!";
            Sleep (1500);
            system("cls");
            cout << "Czy chcesz zagrac ponownie? ";
            cin >> odp_0;

            if (!(odp_0=="Tak")||(odp_0=="tak"))
            {cout << "Moze innym razem!";
             exit(0);
            }
                    else
                    goto x;
                    break;
                    }
        case '2':{
            cout << "Zla odpowiedz, sproboj ponownie! ";
            Sleep (1500);
            system("cls");
            cout << "Czy chcesz zagrac ponownie? ";
            cin >> odp_0;

            if (!(odp_0=="Tak")||(odp_0=="tak"))
               {cout << "Moze innym razem!";
                     exit(0);
                    }
                    else
                    goto x;
                    break;
                    }
        case '3':{
            cout << "Poprawna odpowiedz! Przechodzisz dalej!";
            wynik++;
            break;
        }}
        x:  getchar();
        system("cls");

}
return 0;
}



Jak widać, generalnie chodzi o warunki nowej gry. Da się to zapewne zrobić inaczej, to pewne, lecz nie wiem jeszcze jak :)

komentarz zamknięcia: Problem rozwiązany :)

2 odpowiedzi

0 głosów
odpowiedź 7 listopada 2015 przez Surykat Stary wyjadacz (14,780 p.)
Nie do końca rozumiem, jak to u ciebie działa- zarzuć kod i objaśnij:

Chcesz, żeby po poprawnym odpowiedzeniu na pytanie, przejść do nowej linii w konsoli i odpalić pytanie na nowo?
komentarz 7 listopada 2015 przez Mr. Satan Początkujący (390 p.)
Po prostu po złej odpowiedzi pokazuje się pytanie, czy gracz chce zacząć grę od nowa. Jeśli zwraca wartość TRUE, po prostu przechodzi do wiersza czyszczącego ekran i od nowa gra się pokazuje (jest cała w pętli bez końca - jestem laikiem). I po prostu ciekawi mnie, czy da się inaczej niż goto (a na pewno się da). Jest to pytanie zadawane z czystej ciekawości, bo generalnie samo goto coś_tam mnie wystarcza :P
komentarz 7 listopada 2015 przez Surykat Stary wyjadacz (14,780 p.)
Czyli u ciebie "goto" robi za pętlę? :)

A o pętlach while, do..while albo for czytałeś? Dziwi mnie to trochę, że znasz goto, a nie znasz tego, co wymieniłem. Jeśli nie znasz, to wiedz, że goto to zło wcielone i powinno się zakazać jego używania (zarządzanie kodem wypełnionym instrukcjami goto jest niemal niemożliwe, ale skoro się dopiero uczysz, może to nie być dla ciebie oczywiste, więc na razie zaufaj mi na słowo :) ) i zapoznaj się z nimi.

Do tego zadania powinieneś użyć pętli while, a najlepiej do..while.

Link do najwspanialszego kursu na świecie (nie mam noża przy krtani :D ), wyjaśniającego ten temat:

http://miroslawzelent.pl/kurs-c++/petle-for-while-do
komentarz 7 listopada 2015 przez Mr. Satan Początkujący (390 p.)
Nie, nie. Nie za pętlę. Mamy fragment kodu:

    case '3':
        cout << "Zla odpowiedz, konczych gre!. Twoj wynik: "<<wynik <<endl;
        Sleep (1000);
        cout << "Chcesz zagrac jeszcze raz? ";
        cin >> odp_2;
        if ((odp_2=="Tak")||(odp_2=="tak"))
            goto x;
        else
        {
            cout << "Nie, to nie. Twoj wynik: " << wynik;
            exit(0);
        }

    x: getchar();
       system("cls");
       wynik = 0;

Czyli po wartości TRUE dla instrukcji idziemy do części kodu, który jest niemalże na samym końcu. Powoduje on wymuszenie wciśnięcia entera, czyści ekran, a gra rozpoczyna się na nowo :) Po prostu zrobiłem to tak, by nawet po przegranej w pierwszym etapie można było bez ponownego uruchamiania gry zacząć od początku :P

 

BTW: Na koniec wynik przyjmuje wartość 0, aby w razie nowej gry punkty nie były już wbite ;x
komentarz 7 listopada 2015 przez Mr. Satan Początkujący (390 p.)
Poprawiłem pytanie, łatwiej się zorientować o co mi konkretnie chodzi ;) Ewentualnie wytłumacz jak za pomocą pętli to zrobić, chętnie wysłucham :) Pętle znam, ale najwidoczniej nie na tyle dobrze, aby nimi takie operacj przeprowadzać.
0 głosów
odpowiedź 7 listopada 2015 przez furas Maniak (53,800 p.)
Czy pisząć "wiersz" masz na myśli "linia kodu" ?

Nikt nie wie gdzie się znajduje u Ciebie wiersz czyszczący ekran.
U mnie na przykład nigdy nie ma takiej linii :)

Jeśli chcesz aby coś się powtarzło wiele razy to musisz umieścić to w pętli `while` lub `for`. W zależności od podanych tam warunków pętla może wykonywać się nawet w nieskończoność.
komentarz 7 listopada 2015 przez Mr. Satan Początkujący (390 p.)
Tak, mam na myśli linię kodu. Generalnie chcę tylko wiedzieć, jakie są inne sposoby przejścia do danej linii, powiedzmy z 50 na 100 (czysta hipotetyka). Robię czyszczenie ekranu, bo tak mi dość wygodnie, jako, że ledwo tydzień w tym siedzę, pewnie są inne sposoby na ponowienie gry, ale tym się teraz nie zajmujmy, bo mi głowa wybuchnie :)
komentarz 7 listopada 2015 przez Surykat Stary wyjadacz (14,780 p.)
Nie ma sensu przechodzenie z linii 50 do 100. Zrozumiesz to, kiedy poznasz, czym są funkcje i pętle.
komentarz 7 listopada 2015 przez furas Maniak (53,800 p.)
Tak jak już inni powiedzieli - umieszczasz w pętli `for` lub `while` kod od linii 50 do 100 i wtedy nie potrzebujesz `goto`.

Podobne pytania

0 głosów
0 odpowiedzi 103 wizyt
pytanie zadane 17 marca 2022 w C i C++ przez Sway22 Początkujący (270 p.)
0 głosów
1 odpowiedź 812 wizyt
pytanie zadane 30 marca 2019 w C i C++ przez robertos18 Obywatel (1,120 p.)
0 głosów
2 odpowiedzi 179 wizyt
pytanie zadane 9 grudnia 2018 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 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!

...