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

Programowanie poziom 0 - quiz

Object Storage Arubacloud
0 głosów
247 wizyt
pytanie zadane 27 sierpnia 2020 w C i C++ przez MatheoMONSTER Nowicjusz (140 p.)

Hejka. Dopiero co zacząłem swoją przygodę z C++ i jak na razie opanowałem komendy "if" oraz "else". Aby je przećwiczyć chciałem stworzyć sobie quiz, coś na zasadzie milionerów. Cały program działa, ale tylko do pierwszego pytania. Jeśli odpowiemy na nie poprawnie, wyświetla się normalnie drugie pytanie. Chciałbym zrobić tak, że gdy odpowiemy na nie błędnie, pokaże się tylko komunikat, że "odpowiedź niepoprawna" i nie pokaże się kolejne pytanie, czego niestety nie umiem zrobić, dlatego zwracam się do Was o pomoc. Oto kod programu : 

 

#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
string odpowiedz,A,B,C,D;
int main ()
{
    cout<<"Witamy w milionerach!"<<endl;
    cout<<"Pytanie pierwsze:"<<endl;
    cout<<"Ktora z tych osob ma nagrode Nobla?"<<endl;
    cout<<"A.Henryk Sienkiewicz"<<endl;
    cout<<"B.Leo Messi"<<endl;
    cout<<"C.Robert Lewandowski"<<endl;
    cout<<"D.Wojciech Cejrowski"<<endl;
    cin>>odpowiedz;
    if (odpowiedz=="A")
        cout<<"Poprawna odpowiedz!"<<endl;
    else
        cout<<"Bledna odpowiedz!. Niestety odpadasz!"<<endl;
    if (odpowiedz=="A")
            cout<<"Pytanie drugie"<<endl;
    cout<<"Ktora druzyna wygrala w roku 2020 lige mistrzow?"<<endl;
    cout<<"A. FC Barcelona"<<endl;
    cout<<"B. Real Madryt"<<endl;
    cout<<"C. Juventus Turyn"<<endl;
    cout<<"D. Bayern Monachium"<<endl;
    cin>>odpowiedz;
    if(odpowiedz=="D")
        cout<<"Poprawna odpowiedz"<<endl;
    else
        cout<<"Niepoprawna odpowiedz! Odpadasz!"<<endl;
    if(odpowiedz=="D")
        cout<<"Pora na pytanie nr. 3"<<endl;
return 0; 



}

 

komentarz 28 sierpnia 2020 przez VBService Ekspert (252,660 p.)
edycja 28 sierpnia 2020 przez VBService

Biorąc dosłownie komunikat z gry: wink

cout<<"Bledna odpowiedz!. Niestety odpadasz!"

na tym etapie nie potrzebujesz pętli i tablic itd., bo błędna odpowiedź to w zasadzie koniec gry, czyli rozwiązanie podane przez @Zaqu93

... jeżeli odpowiedź będzie niepoprawna użyj return 0 ...

 

else
        cout<<"Bledna odpowiedz!. Niestety odpadasz!"<<endl;
        return 0;

 

 

 

 

komentarz 28 sierpnia 2020 przez Restej Dyskutant (8,690 p.)
Tylko, że autor pytania napisał, że nie chce kończyć programu w momencie udzielenia błędnej odpowiedzi . Zakładam że chce aby program rozpoczął się od nowa lub to samo pytanie było wyświetlane dopóki nie zostanie podana poprawna odpowiedź. No chyba że źle to zrozumiałem
komentarz 28 sierpnia 2020 przez VBService Ekspert (252,660 p.)

@Kuba776, ale jeśli

cout<<"Bledna odpowiedz!. Niestety odpadasz!"

to jak możesz ponownie udzielić odpowiedzi, czy przejść do pytania drugiego, dlatego napisałem: wink

Biorąc dosłownie komunikat z gry

3 odpowiedzi

+1 głos
odpowiedź 27 sierpnia 2020 przez Zaqu93 Gaduła (4,850 p.)

Jeżeli chcesz zakończyć program jeżeli odpowiedź będzie niepoprawna użyj return 0; to chyba najłatwiejsze rozwiązanie. Masz przykładowy kod.

if(warunek) {
   std::cout << "Poprawne" << std::endl;
} else {
   std::cout << "Niepoprawne" << std::endl;
   return 0;
}

 

komentarz 27 sierpnia 2020 przez MatheoMONSTER Nowicjusz (140 p.)
Właśnie nie chcę kończyć programu, tylko żeby nie wyświetlały się kolejne pytania w przypadku błędnej odpowiedzi
komentarz 27 sierpnia 2020 przez Zaqu93 Gaduła (4,850 p.)

To w takim razie możesz zanestować kolejne pytania w if:

if (warunek) {
   if(warunek) {
      //i tak dalej
   }
}
Jednak to dość nie optymalne
 
+1 głos
odpowiedź 28 sierpnia 2020 przez Restej Dyskutant (8,690 p.)
Do zrobienia tego o czym mówisz przydałoby się użyć tablic oraz pętli. Zakładam, że jeszcze nie poznałeś jeszcze typu jakim jest tablica oraz instrukcji sterującej jaką jest pętla, zatem zaproponowałbym ci zostawienie chwilowo tego programu i poznanie tych zagadnień. Sam zelent w odcinku podajże o zapisie i odczycie z pliku tekstowego pokazuje jak zrobić taki quiz w konsoli.

Gdy już uzupełnisz wiedzę o te instrukcje, wystarczy utworzyć 5 tablic przechowujących odp A, B, C, D oraz odpowiedź poprawną, a wtedy aby program przy udzieleniu błędnej odpowiedzi nie przechodził dalej, całość zamknąć w pętli while. Mówię to tak orientacyjnie, ponieważ gdy dowiesz się co to są pętle oraz tablice jestem pewien że doznasz olśnienia i zrozumiesz jak łatwo można coś takiego wykonać :)
komentarz 28 sierpnia 2020 przez Restej Dyskutant (8,690 p.)
Chociaż użycie tych tablic tutaj bardziej byłoby dla stworzenia poprawnego i optymalnego kodu, bo można użyć samej pętli while przy każdym osobnym ifie i wtedy to samo pytanie będzie się wyświetlać dopóki użytkownik nie poda poprawnej odpowiedzi lecz taki zapis byłby mało elegancki.
0 głosów
odpowiedź 28 sierpnia 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)

W kodzie poniżej używam trochę więcej mechanizmów języka niż ifów, więc zdaje sobie sprawę, że miejscami kod może być niezrozumiały. Pomimo tego zachęcam Cię do zerknięcia na kod, żeby zobaczyć jak ten problem można łatwo rozwiązać, gdy poznasz już dodatkowe mechanizmy języka (z nowych dla Ciebie rzeczy używam tu: pętli, tablicy i struktury).

#include <iostream>

struct Question
{
    std::string m_Content;
    std::string m_CorrectAnswer;
    // and so on...
};

int main()
{
    Question questions[] =
    {
        {"Content of first question", "1"},
        {"Content of second question", "2"},
    };

    for (const auto & question : questions)
    {
        std::cout << question.m_Content << std::endl;

        std::string userAnswer;
        std::cout << "Answer: ";
        std::cin >> userAnswer;

        if (userAnswer != question.m_CorrectAnswer)
        {
            std::cout << "This is not the correct answer. Correct answer is " << question.m_CorrectAnswer << std::endl;
            break;
        }
    }

    std::cout << "Thanks for playing" << std::endl;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 295 wizyt
pytanie zadane 25 września 2020 w C i C++ przez kasia6789 Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 297 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez jeden dwa Nowicjusz (170 p.)
0 głosów
1 odpowiedź 156 wizyt

92,543 zapytań

141,385 odpowiedzi

319,493 komentarzy

61,929 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!

...