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

Problem z if

Ostatnio zmodyfikowano 2014-06-22 19:04
Autor Wiadomość
Vmax96
Temat założony przez niniejszego użytkownika
Problem z if
» 2014-06-22 17:20:11
C/C++
#include <iostream>
#include <limits>
int main()
{
    unsigned int liczba;
   
    do
    {
        std::cout << "Podaj liczbe dodatnia: ";
        std::cin >> liczba;
        std::cin.fail();
        if( std::cin.fail() == 1 )
        {
            std::cout << "Podales litere zamiast cyfry" << std::endl;
            if( liczba < 0 )
            {
                std::cout << "Podales liczbe ujemna" << std::endl;
            }
        }
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    } while( liczba >= 0 );
   
    std::cout << "Podana liczba to: " << liczba << std::endl;
    return 0;
}
Ma to działać następująco:
- Program wyświetli liczbę tylko wtedy gdy będzie ona większa od zera. W innym wypadku (litera zamiast cyfry/liczby, liczba/cyfra ujemna) program pokaże błąd.

Odpalam program wpisuję "aaaa" zamiast cyfry i pokazuje:
Podales litere zamiast cyfry
Wszystko zgodnie z planem. Inaczej jest gdy podaję cyfrę ujemną. Nie ma komunikatu.

P-112509
Loodwin
» 2014-06-22 17:27:05
Taa się pewnie dzieje, bo inicjujesz zmienną typu
unsigned int
, która przyjmuje wartości od 0 do 4'294'967'295. http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1​/Pojecie-zmiennej-i-podstawowe​-typy-danych​/11

P.S Kod umieszczamy w znacznikach
P-112510
killjoy
» 2014-06-22 17:31:08
@UP Nie dość, że mylisz inicjacje z inicjalizacją, to gadasz głupoty.

Wczytanie liczby ujemnej, poprzez cin, do typu danych z etykietą
unsigned
, nie ustawia flagi błędu w strumieniu.
P-112511
Glazus
» 2014-06-22 17:39:35
Jak dobrze rozumiem to osiągnąć to co próbujesz osiągnąć możesz po takich poprawkach:
C/C++
#include <iostream>
#include <limits>
int main()
{
    int liczba; // tak jak wyżej, typ unsigned przyjmuje tylko liczby dodatnie
   
    do
    {
        std::cout << "Podaj liczbe dodatnia: ";
        std::cin >> liczba;
        std::cin.fail();
        if( std::cin.fail() == 1 )
        {
            std::cout << "Podales litere zamiast cyfry" << std::endl;
        }
        else if( liczba < 0 ) // zagnieżdzanie tego warunku w tym poprzednim było całkowicie bez sensu
        {
            std::cout << "Podales liczbe ujemna" << std::endl;
        }
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    } while( liczba <= 0 ); // tutaj także dokonałem zmiany, bo także to co było, było bez sensu
   
    std::cout << "Podana liczba to: " << liczba << std::endl;
   
    return 0;
}
P-112512
Monika90
» 2014-06-22 18:05:11
Wczytanie liczby ujemnej, poprzez cin, do typu danych z etykietą
unsigned, nie ustawia flagi błędu w strumieniu.
Chyba jednak powinno ustawić, tu ustawia http:/​/coliru.stacked-crooked.com/a​/d0f2f02370bd2402
P-112515
killjoy
» 2014-06-22 19:04:54
Odnosiłem się do postu autora, ale @Monika90 masz rację jedna flaga kompilatora w tym przypadku -stdlib=libc++, może zmienić działanie programu, czego ja nie wziąłem pod uwagę :P
P-112521
« 1 »
  Strona 1 z 1