kako provjeriti je li broj cijeli broj c


Odgovor 1:

Za pretvaranje niza s tipkovnice u odgovarajući cijeli broj imate nekoliko scenarija:

  • pozitivni cijeli broj samo znamenke 0–9 u nizu.
  • negativni cijeli broj započinje s '-', samo znamenke 0–9 nakon toga.
  • eksponencijalni cijeli broj, ima 'e' ili 'E' između baze i eksponenta, može biti cijeli broj čak i ako baza ima mantisu, ako je eksponent dovoljno velik.

Stoga je bolje provjeriti može li se niz prvo pretvoriti u broj s pomičnim zarezom, zatim je li riječ o cijeloj vrijednosti i kao iznimku uhvatiti loše znakove.

Koristim STL funkciju string-to-float std :: stof unutar dvije funkcije, ali hvatam nevaljane znakove. U ovom slučaju znakovi nakon valjanog plutajućeg slova zanemaruju se i dalje dobivate broj.

#include #include #include #include #include // baca std :: invalid_argument, std :: out_of_range long string_to_long (const std :: string & s){ plutajuće f = std :: stof (s); povratak dugo (f);}// baca std :: invalid_argument, std :: out_of_range bool je_integer (const std :: string & s){ plutati f; plutati r; f = std :: stof (s); r = f - dugo (f); povratak r == 0; }int main (){ dugo x; std :: string n; probati { std :: cin >> n; if (is_integer (n)) // baca {x = niz_dugo (n); // baca std :: cout << "U redu: \ t" << x; } drugo { std :: cout << "samo cijeli brojevi, bez plutajućeg slova \ n"; } } ulov (const std :: invalid_argument & ia) { std :: cerr << "Nevažeći argument:" << ia.what () << '\ n'; std :: cout << "nađen je necjelobrojni znak"; } ulov (const std :: out_of_range & oor) { std :: cerr << "izvan dometa:" << oor.what () << '\ n'; } std :: cout << std :: endl; povratak 0;}

Pomalo, ali i ispravno u tome što obrađuje problematične cijele brojeve poput

1.23e4 U redu: 12300
123dobro u redu: 123

Odgovor 2:

Dragi prijatelji, otvorio sam račun u kvori kako bih odgovorio na ona pitanja na koja ja najbolje mogu odgovoriti.

Dakle, vaš program na C ++-u za provjeru je li broj cijeli broj ili nije naveden je u nastavku. Ovaj program nije poput programa s drugim odgovorima, jer ovaj program također otkriva je li broj zapravo cijeli broj ili decimalni broj, koji vi uglavnom nigdje niste pronašli na internetu.

TVOJ PROGRAM JE:

#include pomoću prostora imena std; int main () {cout << "Unesite broj: \ n"; plutati n; cin >> n; int res = n / 1; if (n <= 0 || n> = 0 && res * 1 == n) {cout << "Uneseni broj je cijeli broj. \ n"; } else {cout << "Uneseni broj nije cijeli broj. \ n"; }}

GLASAJTE ako vam se sviđa odgovor.

A ako želite vidjeti sve vrste C ++ programa koji mogu doći na vašem ispitu, posjetite

www.webhostssss.weebly.com

.

Do sada smo objavili 50 programa, ali u budućnosti ćemo moći pokriti sve vrste programa koji mogu doći na vašem ispitu.


Odgovor 3:

Nisam siguran da razumijem pitanje. Kad imate vrijednost, već znate njezin tip onako kako je deklariran u opsegu ... Ali kada trebate znati može li se neka vrijednost protumačiti kao cijela vrijednost, možete provjeriti veličinu tipa. Ovaj način ne uzima u obzir standardne pretvorbe i način je da provjerite može li se to protumačiti kao int bez jedinih bajtova izvan očitavanja iz memorije.

#include pomoću prostora imena std;predložak bool can_be_interpret_as_integer (const T & somedata) {povratak sizeof (somedata)> = sizeof (int);}int glavni (int argc, char * argv []){dvostruki d = 1;kratko s = 1;int i = 1;cout <cout <cout <cout <cout << * (int *) ((void *) & d) <cout << * (int *) ((void *) & s) < cout << * (int *) ((void *) & i) <cout <sustav ("pauza");povratak 0;}

Ne vidim je li to moglo biti korisno :)


Odgovor 4:

C ++ je jezik s jakim sustavom statičkog tipa. Ne provjeravate je li broj cijeli broj; ti to znaš. Kad deklarirate vrstu varijable koju koristite za zadržavanje vrijednosti, kažete "ovo će sadržavati cijeli broj". I ne možete ga koristiti za plovak ili objekt ili bilo što drugo; samo za cijele brojeve.

Ali pretpostavljam da ste pitali za niz koji predstavlja vrijednost i kako provjeriti je li to cijeli broj. Ako upotrebljavate Boost, samo naprijed upotrijebite predložak lexical_cast. Ako nije, upotrijebite std :: stringstream, dakle:

std :: stringstream ss (my_string);int i;if ((ss >> i) .fail ()) { // nije konvertibilan u int}inače { // i sadrži pretvorbu cijelih brojeva}

BTW, ako toliko koristite, vrijedi stvoriti predložak za to - i tako zapravo djeluje Boost lexical_cast ... Nije teško; To ću vam prepustiti kao vježbu.


Odgovor 5:

A2A.

Nisam baš siguran što mislite pod pojmom "broj". Govorite li o vrijednosti pohranjenoj u numeričkom tipu (da ne možete lako shvatiti što je to ... možda zbog predloška)? Tada biste mogli isprobati sljedeće:

#include #include int main (){ automatska vrijednost = 5,0f; auto testMe = neke_funkcijske_template_that_returns_numeric_types (vrijednost); std :: cout << "Evaluacija res:" << testMe << ". \ n"; pomoću testMeType = decltype (testMe);constexpr bool isTestMeAnInteger = std :: numeric_limits :: is_integer; std :: cout << "testMe" << (isTestMeAnInteger? "je": "nije") << "cijeli broj. \ n"; povratak 0; }

Ako, međutim, mislite da imate neki tekst za koji smijete pretpostaviti da je neka vrsta stvarnog broja (a ne u identificiranju tog statičkog tipa numeričke vrijednosti kao u primjeru), raščlanite ga na double. Zatim upotrijebite metode u ostalim odgovorima da biste testirali dvostruko kako biste vidjeli ima li frakcijsku komponentu.


Odgovor 6:

Samo trebate provjeriti jesu li dijelovi stropa i poda jednaki.

Razmotrite sljedeći isječak:

#include

#include

pomoću prostora imena std;

int main ()

{

plutati a;

cin >> a;

ako (pod (a) == strop (a))

cout <

drugo

cout << "Nije cijeli broj";

povratak 0;

}

Sljedeći isječak dat će izlaz kao Nije cijela vrijednost jer strop i pod plovka nisu jednaki.

Živjeli !


Odgovor 7:

/ * Da biste provjerili je li zadani broj cijeli broj ili nije * /

#include

int main ()

{

plutati a;

printf ("Unesite broj koji želite provjeriti:");

scanf ("% f", & a);

ako (a == (int) a)

printf ("Broj je cijeli broj. \ n");

drugo

printf ("Broj nije cijeli broj. \ n");

}


Odgovor 8:

Razni slučajevi:

  1. C ++ je jako otkucan jezik. Stoga kada je varijabla deklarirana, znate da je to cijeli broj, jer je deklarirana kao takva. Čak i kada varijablu proslijedite funkciju, ona se deklarira kao int. Kad prenesete pokazivač na varijablu, to će biti int * ili int &. Dakle, znate varijablu po njenoj deklaraciji.
  2. Pretpostavimo da šaljete float ili double i trebate znati je li razlomljeni dio nula - ako dobro razumijem vaše pitanje. U tom slučaju možete koristiti funkcije stropa (zaokruživanje) i poda (zaokruživanje dolje).
  3. S obzirom na double, možete rastaviti dijelove cijelih brojeva i razlomaka koristeći modf.
  4. Ako koristite C ++ 17, imate 'bilo koji' tip varijable, koji može sadržavati bilo koju vrstu varijable - int, float, string itd.
std :: bilo koji a = 1;std :: cout << a.type (). name () << ":" << std :: bilo koji_cast (a) << '\ n';otisci: i: 1

Odgovor 9:

Pomoću funkcije modf možete provjeriti je li razlomljeni dio nula:

#include #include pomoću prostora imena std;int main (){ dvostruki broj, tmp; cout << "Unesite broj:" << endl; cin >> num; if (cin.fail () || std :: isnan (num)) {cout << "Niste unijeli broj." << endl; povratak -1; }automatski str = modf (num, & tmp)? "nije": "je"; cout << num << str << "cijeli broj" << endl;}

Odgovor 10:

Pitanje je pomalo nejasno. Čini se jasno da ne pitate je li to cjelobrojni tip podataka. Također pretpostavljam da ne želite znati sintaksu cijelog broja. Pretpostavit ću da želite znati ima li float (ili double) cjelobrojnu vrijednost. Pretpostavimo da je F float / double koji želite provjeriti, a ja cijeli broj. Dodijelite F I. Tada, ako je I jednako F, ​​F ima cijelu vrijednost. Očito morate biti zabrinuti zbog ograničenja vrijednosti u ovoj vrsti testa.


Odgovor 11:

Isječak koda za provjeru je li zadana vrijednost (float, long) am integer:

cin >> num;int_val = int (broj)ako (int_val == broj) {cout << "Cijeli broj";}drugo{cout << "Nije cijeli broj";}

Tip podataka varijable može se provjeriti pomoću typeid operatora iz typeinfo.

Referenca:

typeid operator - cppreference.com