Pytania do metody good() i fail()
Ostatnio zmodyfikowano 2011-11-05 21:09
Slonzok Temat założony przez niniejszego użytkownika |
Pytania do metody good() i fail() » 2011-11-05 11:46:09 Witam. Mam pytanko na temat sprawdzania danych, metoda good() i fail() . Pytanie 1: Wartość zmiennej float to śmieć, dlaczego po podaniu znaku zamiast liczby, zmienna przyjęła wartość 0? A w przypadku zmiennej typu int nie? Pytanie 2: Dlaczego gdy do zmiennej typu char przypisuje liczbę to nie zwraca błędu? Kod programu: #include <iostream> int main() { float a; int b; char znak; bool aSukces; bool aBlad; bool znakSukces; bool znakBlad; std::cout << "float a = " << a << " int b = " << b << std::endl << std::endl; std::cout << "Podaj liczbe rzeczywista: "; std::cin >> a; aSukces = std::cin.good(); aBlad = std::cin.fail(); std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe calkowita: "; std::cin >> b; aSukces = std::cin.good(); aBlad = std::cin.fail(); std::cin.clear(); std::cin.sync(); std::cout << "Podaj znak: "; std::cin >> znak; znakSukces = std::cin.good(); znakBlad = std::cin.fail(); std::cout << std::endl << std::endl; std::cout << "Liczba rzeczywista to: " << a << " Wczytano? " << aSukces << " Bledy? " << aBlad << std::endl; std::cout << "Liczba calkowita to: " << b << " Wczytano? " << aSukces << " Bledy? " << aBlad << std::endl; std::cout << "Znak to: " << znak << " Wczytano? " << znakSukces << " Bledy? " << znakBlad << std::endl; return 0; }
|
|
malan |
» 2011-11-05 12:09:31 Daj już sobie spokój z tym obrazkiem! Ja już go wstawię! :P |
|
pekfos |
» 2011-11-05 12:11:39 Wartość zmiennej float to śmieć, dlaczego po podaniu znaku zamiast liczby, zmienna przyjęła wartość 0? |
Czego się spodziewasz po niezainicjalizowanej zmiennej? Jak podasz znak to chyba oczywiste że nie zostanie przyjęty a coś trzeba zwrócić w przypadku błędu.. Dlaczego gdy do zmiennej typu char przypisuje liczbę to nie zwraca błędu? |
Może dlatego że nie wpisałeś liczby tylko cyfrę, która jest znakiem? |
|
Slonzok Temat założony przez niniejszego użytkownika |
» 2011-11-05 12:49:59 Czego się spodziewasz po niezainicjalizowanej zmiennej? Jak podasz znak to chyba oczywiste że nie zostanie przyjęty a coś trzeba zwrócić w przypadku błędu..
|
Wiem, że niezainicjowałem zmiennej, zrobiłem to celowo, jednakże oczekiwałem że zwróci śmiecia tak jak w przypadku zmiennej typu int , a nie 0, dlaczego 0? Może dlatego że nie wpisałeś liczby tylko cyfrę, która jest znakiem?
|
Ok, zamieniłem cyfrę na liczbę i otrzymałem: Podaj znak: 898 Znak to: 8 Wczytano? 1 Błędy? 0
Dlaczego nadal nie zwraca błędu? |
|
Drraven |
» 2011-11-05 13:20:10 poczytaj co to char w c++ możesz tam mieć tyko jeden znak. |
|
Slonzok Temat założony przez niniejszego użytkownika |
» 2011-11-05 16:12:06 [cite]poczytaj co to char w c++ możesz tam mieć tyko jeden znak.[/cite] No fakt :) resztę obcina, jakieś zaćmienie umysłu :] a ma ktoś jakieś wyjaśnienie dlaczego przy zmiennej float zwraca 0 a nie śmiecia? |
|
Drraven |
» 2011-11-05 17:10:07 bo to kod błędu, Zobacz sobie jak podasz 10e2 Czy inną liczbę z notacji naukowej. |
|
Slonzok Temat założony przez niniejszego użytkownika |
» 2011-11-05 21:09:07 @Drraven Faktycznie, zawsze zwraca 0. Rozumiem że to kod błędu. Pytanie tylko brzmi, dlaczego typ float zwraca 0 jako błąd a int tego nie robi. Z czego wynika ta różnica? Z kaprysu twórcy tych typów? edit: Z powodu braku odpowiedzi, zamykam temat. |
|
« 1 » |