Zagniezdzanie petli if w while
Ostatnio zmodyfikowano 2014-10-21 20:35
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 ... |
|
Jacob99 |
» 2014-10-21 17:19:17 A if nie jest pętlą, tylko warunkiem. |
|
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 |
|
matys210 |
» 2014-10-21 17:28:12 może dlatego że nie masz np żadnego if (i=='A') |
|
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 :/ |
|
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 |
|
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. |
|
« 1 » |