Ładny brzuch

Witam, problem jest nastepujacy, uzytkownik ma podac dwie liczby, lub znak 'q'-jesli chce zakonczyc program, w przypadku blednych danych, pozbywam sie ich w petli. Nie wiem jak zrobic warunek, probowalem tak, ale nie dziala:
#include <iostream> int main() { using namespace std; cout<<"Podaj dwie liczby,('q'-aby zakonczyc)\n"; int a,B; char ch; while(!(cin.get()=='q')||(cin>>a,cin>>B)) { cin.clear(); while (cin.get()!='\n') continue; cout<<"Podaj dwie liczby,('q'-aby zakonczyc)\n"; }; system("PAUSE"); return(0); }

Program wczytuje dwa znaki 'q', wtedy sie konczy, jednak liczby traktuje jako zle dane, nie wiem dlaczego alternatywa || nie dziala.
Uytkownik bart131313 edytowa ten post 03 marzec 2010, 23:08


Owszem || oznacza alternatyw, ale le j wykorzystujesz. Nie mona tak wywoa magicznie tego lub tego kodu. Wynik dziaania alternatywy jest tak jak w matematyce okrelany na podstawie dwch zda p i q. W twoim przypadku decyzja o wejciu w blok while uzaleniona jest od tego czy cae zdanie logiczne!(cin.get()=='q')||(cin>>a,cin>>B)Jest prawd. Czyli czy wczytany znak to 'q' jest prawd lub czy wczytano dwie liczby int s prawd. Co jak sam widzisz wikszego sensu nie ma. Choby dlatego, e eby stwierdzi prawd trzeba wykona wszystkie 3 wczytywania i std Twj problem. Nie twierdz, e w pewnych sytuacjach wrzucenie wczytywania danych w warunek ptli jest zy, ale tutaj o wiele lepiej dla Ciebie spisze si wczytywanie napisu std::string i sprawdzanie czy rwny jest on "q" czy moe s to cyfry. Jeeli cyfry to konwertujesz je na liczby int i miga. Ewentualnie moesz jeszcze poczyta o std::cin.fail().

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •