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

Pytania do metody good() i fail()

Ostatnio zmodyfikowano 2011-11-05 21:09
Autor Wiadomość
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()
.
Screen
Screen
 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:
C/C++
#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;
}
P-43340
malan
» 2011-11-05 12:09:31
Daj już sobie spokój z tym obrazkiem! Ja już go wstawię! :P
P-43348
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?
P-43349
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?
P-43352
Drraven
» 2011-11-05 13:20:10
poczytaj co to char w c++ możesz tam mieć tyko jeden znak.
P-43354
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?
P-43364
Drraven
» 2011-11-05 17:10:07
bo to kod błędu, Zobacz sobie jak podasz 10e2 Czy inną liczbę z notacji naukowej.
P-43373
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.
P-43403
« 1 »
  Strona 1 z 1