Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zagniezdzanie petli if w while

Ostatnio zmodyfikowano 2014-10-21 20:35
Autor Wiadomość
USB-Host
Temat założony przez niniejszego użytkownika
Zagniezdzanie petli if w while
» 2014-10-21 17:16:08
Witam, mam mały problem z zagnieżdżaniem pętli, przedstawie go na poniższym prostym kodzie:

#include <iostream>
#include <conio.h>

using namespace std;

main()
{
    while(1)
    {
        int i;
        cout << "\n Wybierz (numer pozycji): \n 1. A\n 2. B\n 2. C " << endl;
        cin >> i;

            if (i==1)
            {
                cout << "Wybrales A" << endl;
            }
            else if (i==2)
            {
            cout << "Wybrales B" << endl;
                }
            else if (i==3)
            {
            cout << "Wybrales C" << endl;
                }
            else
            {
                cout << "Wybrales zla opcje" << endl;
            }

        cout << "Nacisnij dowolny klawisz aby kontynuowac....." << endl;
        getch();
    }

}


Sprawa wyglada tak że dopoki wpisujemy liczby 123 doatejmy ABC, jesli wpiszemy np 22 to dostaniemy komunikat o bledzie (else), petla wykona sie ponownie i znowu zapyta o int i. Okej. Problem pojawia sie gdy np przez przypadek wrzucimy tam char np litere B, zamini sie to na ASCII w i beda smieci, wywali blad i petla j.w. powinna sie wykonac znowu i zapytac o nowa wartosc i, jednak tak nie robi tylko od razu leci do "else". Prosze powiedziec gdzie robie blad bo ja na prawde nie rozumiem dlaczego tak sie dzieje ...
P-119159
Jacob99
» 2014-10-21 17:19:17
C/C++
if( !cin.good() )
{
    //instrukcje
}
A if nie jest pętlą, tylko warunkiem.
P-119160
USB-Host
Temat założony przez niniejszego użytkownika
» 2014-10-21 17:24:34
OK, ja już to naprawiłem stosując char zamiast int i. Ale dlaczego program "głupieje" i pomija wszystko aż do else w petli while gdy podamy mu char? To mnie najbardziej intryguje
P-119162
matys210
» 2014-10-21 17:28:12
może dlatego że nie masz np żadnego if (i=='A')
P-119163
USB-Host
Temat założony przez niniejszego użytkownika
» 2014-10-21 17:30:33
Ja to rozumiem tak, wpisuje np A, on wywala błąd w i==1 i==2 i==3 i wykonuje elsa czyli wypisuje komunikat, petla sie konczy wyskakuje komuniakt o getchar(), (mamy w while (1), czyli petla nieksonczona) wracamy do gory i POWINNISMY dostac pytanie o podanie i, a on od razu leci do else. Nie ejst to problem żaden bo już mamy 2 spsooby jak to roziwazac tylko takie pytanie z ciekawosci, dalczego tak sie dzieje :/
P-119165
Jacob99
» 2014-10-21 18:53:19
Bo nie czyścisz strumienia po błędzie.
Ta litera, czy inny znak pozostaje w buforze strumienia wejściowego i w kółko jest wczytywana, więc w kółko wywołuje błędy
P-119171
pw1602
» 2014-10-21 20:35:50
Ja bym proponował, abyś nie pozwalał na wpisywanie innych liczb niż 1, 2, 3. Możesz przecież za pomocą
cin.good()
 pozwolić użytkownikowi tylko i wyłącznie pisanie tych trzech cyfr. Skorzystaj również z poprzednich kursów, aby pozbyć się niepotrzebnych błędów.
P-119189
« 1 »
  Strona 1 z 1