[C++] Ja odróżnić typ int?

maks2002
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 13 sty 2010, o 23:18
Płeć: Mężczyzna
Lokalizacja: Mysłowice

[C++] Ja odróżnić typ int?

Post autor: maks2002 »

Witam.
Mam problem ze sprawdzeniem typu liczby.
Chce wprowadzić w program wyrażenie, że jeżeli coś jest liczbą całkowitą. Brakuje mi tego, co
if (x == liczba int). Jak to zapisać w c++ ?
Bardzo dziękuję za odpowiedź.
Ostatnio zmieniony 23 gru 2014, o 09:12 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[C++] Ja odróżnić typ int?

Post autor: Adifek »

Kod: Zaznacz cały

if (typeid(x) == typeid(int))
powinno działać
maks2002
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 13 sty 2010, o 23:18
Płeć: Mężczyzna
Lokalizacja: Mysłowice

[C++] Ja odróżnić typ int?

Post autor: maks2002 »

Niestety, kompilacje przechodzi ale pomija warunek...
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[C++] Ja odróżnić typ int?

Post autor: Adifek »

Jakie było wejście?
maks2002
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 13 sty 2010, o 23:18
Płeć: Mężczyzna
Lokalizacja: Mysłowice

[C++] Ja odróżnić typ int?

Post autor: maks2002 »

w deklaracji mam tylko int

-- 22 gru 2014, o 22:28 --

Kod: Zaznacz cały

if (typeid(sqrt(a)) == typeid(int))
czy tak może być?
Ostatnio zmieniony 23 gru 2014, o 09:12 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[C++] Ja odróżnić typ int?

Post autor: Adifek »

Dajesz za mało wiadomości, by Ci rozsądnie pomóc Możesz też spróbować tak:

Kod: Zaznacz cały

if( x == ((int)x) )
Ale dopóki nie wiem do czego to potrzebujesz, to to jest takie strzelanie. Pierwsze rozwiązanie bywa czasem niebezpieczne, drugie też
maks2002
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 13 sty 2010, o 23:18
Płeć: Mężczyzna
Lokalizacja: Mysłowice

[C++] Ja odróżnić typ int?

Post autor: maks2002 »

To jest to bardzo dziękuję za pomoc
Niestety, moja przygoda z c++ jest początkiem i to sam się uczę, kiedyś na studiach programowałem w fortranie. Dziękuję za pomoc raz jeszcze
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

[C++] Ja odróżnić typ int?

Post autor: Adifek »

No to już wiemy czemu poprzednio nie działało. Funkcja sqrt() zwraca typ double, więc nawet jeśli miałeś liczbę całkowitą, to nie miałeś typu cołkowitoliczbowego (int z pierwszego postu sugerował, że sprawdzasz typ). W drugim sposobie rzutujesz x na int, tj. dla liczby zmiennoprzecinkowej ucinasz jej część ułamkową. To też potrafi być niebezpieczne, bo możesz np. wyjśc poza zakres int (wtedy co prawda powinno działać, ale głowy nie dam), albo jeśli zamiast floata masz tam jakąś inną strukturę liczbową, to rzutowanie może nie być dobrze zdefiniowane albo dać dziwny wynik.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[C++] Ja odróżnić typ int?

Post autor: Vardamir »

Albo korzystamy z funkcji std::modf, która jest bezpieczna i stworzona między innymi do takich zadań.

Kod: Zaznacz cały

#include <iostream>
#include <cmath>

int main() {
	double val=3.12;
	double val2=3.00;
	double val3=val+1.88;
	double ptr;
	std::cout << ((modf(val,&ptr)==0)?"YES
":"NO
");
	std::cout << ((modf(val2,&ptr)==0)?"YES
":"NO
");
	std::cout << ((modf(val3,&ptr)==0)?"YES
":"NO
");
	
	return 0;
}
ODPOWIEDZ