MTPR Temat założony przez niniejszego użytkownika |
Typy danych - opis szczegółowy » 2013-12-10 19:51:32 Witam. Napisałem prosty program: #include<iostream> int main() { long a; std::cout << " Podaj liczbe "; std::cin >> a; if( a != 0 ) std::cout << " ok "; else { if( a == 0 ) std::cout << " Wybierz inna opcje niz 0 "; } }
Na pierwszy rzut oka przebieg programu wydaje się być oczywisty, jednak jak się okazało wszystko zależy od typu zmiennej. Używałem wszystkich możliwych typów danych podanych w kursie z lekcji 9 i różnie to wyszło, przykładowo przy zmiennej typu long po wprowadzeniu litery a otrzymałem napis " wybierz inna opjca niz 0 " co znaczy że instrukcja if została pominięta czyli wyrażenie logiczne musiało zwrócić wartość fałszywą, ale jaki prawem a != 0 jest fałszywe i a == 0 prawdziwe ? Przy zmienne typu int natomiast wyświetla się " ok " czyli w porządku. Szukałem odpowiedzi to tu to tam, ale jedynie co znalazłem to czy dany typ zmiennej jest liczbą całkowitą, zmiennoprzecinkową oraz to jaki ma zakres, jednak muszą one się jeszcze chyba czymś innych różnić. Niby typ int jak i long to liczby całkowite ale używając tych zmiennych ( wpisując np. a ) widać inny rezultat. Dlatego chciałbym uzyskać odpowiedź na szczegółowe opisanie pojedynczych typów zmiennych, żeby na przyszłość nie strzelać po kolei aż się uda, tylko od razu wiedzieć. |
|
pekfos |
» 2013-12-10 20:03:54 Wyzeruj zmienną przed wczytywaniem. |
|
MTPR Temat założony przez niniejszego użytkownika |
» 2013-12-10 20:25:53 Jak to się ma do pytania ? Napisałem program dla zobrazowania problemu, nie chodzi mi o jego rozwiązanie. Ten akurat jest prosty ale przy innym, bardziej rozbudowanym kodzie inicjalizacja mogłaby nie być pożądana przez programistę. |
|
pekfos |
» 2013-12-10 20:41:05 W C++03 std::istream nie zeruje wczytywanej zmiennej, jeśli wystąpi błąd. |
|
Nitr0Skay |
» 2013-12-10 21:51:02 Wybaczcie, że się wtrącę. Pekfos, mógłbyś mi proszę wytłumaczyć, skąd wiesz, że jest to C++03 ?? Byłbym wdzięczny. |
|
MTPR Temat założony przez niniejszego użytkownika |
» 2013-12-12 19:36:38 Może ktoś się w końcu wypowie ? :d Czemu w jednym przypadku ( int ) program działa prawidłowo, a w drugim ( long ) już nie ?
pekfos
Po wyzerowaniu zmiennej nic się nie zmienia.
|
|
pekfos |
» 2013-12-12 21:57:49 jaki prawem a != 0 jest fałszywe i a == 0 prawdziwe ? |
Pewnie dlatego, że a jest równe 0. Czemu w jednym przypadku ( int ) program działa prawidłowo, |
przy zmiennej typu long po wprowadzeniu litery a otrzymałem napis " wybierz inna opjca niz 0 " [..] Przy zmienne typu int natomiast wyświetla się " ok " czyli w porządku. |
Na pewno chcesz wczytywać liczbę, a nie tekst? |
|
MTPR Temat założony przez niniejszego użytkownika |
» 2013-12-13 22:13:12 Nie bardzo rozumiem jak a może = 0, nie domyślam się też czemu pytasz o możliwość wczytania tekstu ale mniejsza, liczyłem na konkretną odpowiedź czym mogą różnić się typy danych ( patrz post 1 ) poza zakresem i tym czy dany typ jest liczbą całkowita, zmiennoprzecinkową czy innym znakiem. Jak mówiłem nie chodzi mi o rozwiązanie programu, równie dobrze można zrobić tak i wszystko gra: #include<iostream> int main() { long a; std::cout << " Podaj liczbe "; std::cin >> a; std::cin.good(); if( a != 0 ) std::cout << " ok "; if( a == 0 && std::cin.good() == 1 ) std::cout << " Wybierz inna opcje niz 0 "; if( std::cin.good() == 0 ) std::cout << " Nie podawaj liter "; }
|
|
« 1 » 2 |