Pomoc w zadaniu z kalkulatorem
Ostatnio zmodyfikowano 2016-03-11 17:35
taddkos Temat założony przez niniejszego użytkownika |
Pomoc w zadaniu z kalkulatorem » 2016-03-10 14:28:16 Witam. Nie moge poradzic sobie z pewna kwestia. Jestem poczatkujacy, Chce aby program wczytal liczbe i jesli to nie bedzie liczba lub bedzie rozna od 1, 2, 3, 4 lub 0 to robil tak w kolko. To ma byc menu wyboru gdzie do wybrania jest 1 - 4 i 0. Ponizej trzy moje proby. Jako, ze za bardzo nie umiem chcialem zrobic tak ze jesli zmienna wybor jest rowna 1 - 4 lub 0 to przypisze do sukces wartosc false i dzieki temu dalej bedzie pytal o podanie liczby
do {cin >> wybor; cout <<endl; sukces = cin.good(); cin.clear(); cin.sync(); if (wybor = 1 && 2 && 3 && 4 && 0); sukces = false ;} while (sukces == false);
do {cin >> wybor; cout <<endl; sukces = cin.good(); cin.clear(); cin.sync(); if (wybor != 1 || 2 || 3 || 4 || 0); sukces = false ;} while (sukces == false);
do {cin >> wybor; cout <<endl; sukces = cin.good(); cin.clear(); cin.sync(); if (wybor == 1 || 2 || 3 || 4 || 0); sukces = false ;} while (sukces == false); |
|
carlosmay |
» 2016-03-10 15:30:21 if( wybor = 1 && 2 && 3 && 4 && 0 ); sukces = false; } |
Każdą wartość sprawdza się osobno, nie razem jak tutaj. Nie jest to błąd logiczny dla kompilatora, ale nie robi tego czego się oczekuje. = nie jest operatorem porównania. ; po nawiasie warunku kończy działanie instrukcji warunkowej, więc sukces = false; jako następna instrukcja wykona się zawsze jako niewarunkowa. if( wybor == 1 || wybor == 2...) { sukces = false; } Można krócej: if( 0 > wybor || 4 < wybor ) { sukces = false; } Jeśli mylą ci się operatory relacji pisz wartość po lewej i wtedy pomyłka ( 0 = wybor ) skutkuje błędem kompilacji, bo nie można przypisać nic do liczby. |
|
Gibas11 |
» 2016-03-10 21:20:10 @carlosmay if( wybor == 1 && wybor == 2...) { sukces = false; }
Takie coś może w ogóle zachodzić? EDIT: Chyba Ci się pomyliły operatory logicznego „i” ( && ) i „lub” ( || ). |
|
carlosmay |
» 2016-03-11 04:27:00 @Gibas11 Thanks: |
|
Gibas11 |
» 2016-03-11 16:12:18 Btw popraw jeszcze drugi kawałek, bo pierwszy zachodzi dla wybor należącego do [1, 4] a drugi dla wybor należącego do C \ [1, 3] [0, 4]. ;) |
|
carlosmay |
» 2016-03-11 17:17:30 rozna od 1, 2, 3, 4 lub 0 to robil tak w kolko. |
jesli zmienna wybor jest rowna 1 - 4 lub 0 to przypisze do sukces wartosc false i dzieki temu dalej bedzie pytal o podanie liczby |
Sprzeczne informacje. Wybrałem wersję pierwszą ponieważ powtarza dla wartości spoza zakresu (nieprawidłowe wartości). bo pierwszy zachodzi dla wybor należącego do [1, 4] |
Poglądowy przykład z niedokończonym warunkiem ilustrujący jak składać kolejne porównania. if( wybor == 1 || wybor == 2 )
Dorzucam gotowca wzorowanego na przykładach twórcy tematu: do { sukces = true; std::cin >> wybor; if( !std::cin || 0 > wybor || 4 < wybor ) { sukces = false; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); } } while( sukces == false ); @@Edit: dopisałem to aby już nie przepychać się na znaki. ( && - to był oczywisty błąd - thx). Czasem klepię coś na smartfonie i umykają takie niedopowiedzenia. To nie zwalnia twórcy z myślenia stosowania ewentualnych wskazówek. Co złego, to nie ja. |
|
Gibas11 |
» 2016-03-11 17:35:21 A to może tak. W każdym razie dałeś dwa sprzeczne fragmenty rozdzielone Stąd moja wypowiedź i ewentualne niezrozumienie. |
|
« 1 » |