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

Typy danych - opis szczegółowy

Ostatnio zmodyfikowano 2013-12-14 17:21
Autor Wiadomość
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:

C/C++
#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ć.
P-98927
pekfos
» 2013-12-10 20:03:54
Wyzeruj zmienną przed wczytywaniem.
P-98932
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ę.
P-98934
pekfos
» 2013-12-10 20:41:05
W C++03 std::istream nie zeruje wczytywanej zmiennej, jeśli wystąpi błąd.
P-98936
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.
P-98946
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.
P-99067
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?
P-99072
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:

C/C++
#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 ";
   
}
P-99149
« 1 » 2
  Strona 1 z 2 Następna strona