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

Pomoc w zadaniu z kalkulatorem

Ostatnio zmodyfikowano 2016-03-11 17:35
Autor Wiadomość
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);
P-145853
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.

C/C++
if( wybor == 1 || wybor == 2...) {
    sukces = false;
}

Można krócej:
C/C++
if( 0 > wybor || 4 < wybor ) { // jesli wprowadzona wartosc spoza zakresu zmien flage sukces
    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.
P-145857
Gibas11
» 2016-03-10 21:20:10
@carlosmay
C/C++
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” (
||
).
P-145881
carlosmay
» 2016-03-11 04:27:00
@Gibas11 Thanks:
P-145890
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]. ;)
P-145899
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.
C/C++
if( wybor == 1 || wybor == 2 /*...*/ )

Dorzucam gotowca wzorowanego na przykładach twórcy tematu:
C/C++
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.
P-145901
Gibas11
» 2016-03-11 17:35:21
A to może tak. W każdym razie dałeś dwa sprzeczne fragmenty rozdzielone
Można krócej:
Stąd moja wypowiedź i ewentualne niezrozumienie.
P-145902
« 1 »
  Strona 1 z 1