c++ problem so zadanim celeho cisla

Programovacie jazyky, rady, poradňa...
mudrnudl
Expert
Expert
Používateľov profilový obrázok
Príspevky: 193
Registrovaný: 22 nov 2008, 22:09

c++ problem so zadanim celeho cisla

Príspevok od používateľa mudrnudl »

robim program zo zadania a jedna cast mi robi vyslovene neplechu, pritom som ju osetril.
upravim to trosku, aby som to zjednodusil a aby to prednasajuci nahodou nenasiel tu.

Kód: Vybrať všetko

#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
int a;
cout << "Zadaj cele cislo.\n";
cin >> a;
while (cin.fail())
{
cin.clear();
cin.sync();
cout << "Zadaj cele cislo!\n";
cin >> a;
}
cout << "Tebou zadane cele cislo: " << a << endl;
return 0;
}
program si vyziada zadanie celeho cisla. potom cez vstup nasaje zadany znak/znaky. ak to je cele cislo, tak ho vypise na obrazovku naspat. ak to cele cislo nie je tak poziada znovu o zadanie celeho cisla.

problem je v tom, ze ak uzivatel zada realne cislo (napr.: 3,5 ci 3.5) alebo cislo a za nim bodkou/ciarku a za tym znaky, tak to zobere cislo pred bodkou/ciarkou a mysli si ze uzivatel zadal cele cislo. Jednoducho ten program berie bodku a ciarku ako biely znak.
Ako to mam vyriesit?

DIKY
jojinkho
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 341
Registrovaný: 30 aug 2007, 9:37

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa jojinkho »

Ak chces aby 3.5 bralo ako jedno cislo tak nedavaj int ale float/double.
mudrnudl
Expert
Expert
Používateľov profilový obrázok
Príspevky: 193
Registrovaný: 22 nov 2008, 22:09

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa mudrnudl »

lenze potom to zoberie aj realne cisla

edit: precitaj si este raz prvy prispevok, neico som tam dopisal
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa metthal »

Ja osobne by som tam dal nech to nacitava float/double a potom by som ak by to cislo bolo kladne, porovnaval ci floor(x) == x a ak by to bolo cislo zaporne tak ci ceil(x) == x, ak nie, vyzadoval by som vstup znova
jojinkho
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 341
Registrovaný: 30 aug 2007, 9:37

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa jojinkho »

Tak tak az na to ze neviem co robi ceil a floor, ale da sa to aj jednoduchsie
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa metthal »

Popripade som troska pogooglil a nasiel som funkciu modf, jej prototypy su

Kód: Vybrať všetko

double modf (      double x,      double * intpart );
long double modf ( long double x, long double * intpart );
      float modf (       float x,       float * intpart );
Funckai vracia desatinnu cas a do *intpart zapise integerovu cast. Cize tam by ti stacilo len porovnavat ci to co funkcia vratila je 0 alebo nie.
mudrnudl
Expert
Expert
Používateľov profilový obrázok
Príspevky: 193
Registrovaný: 22 nov 2008, 22:09

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa mudrnudl »

fuha, to je na mna moc zlozite
ked to mam riesit takto, necham to radsej neporiesene
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa metthal »

Nemyslim si ze vyhybat sa problemom je to spravne riesenie. Aspon sa naucis nieco nove, co je dolezite.
mudrnudl
Expert
Expert
Používateľov profilový obrázok
Príspevky: 193
Registrovaný: 22 nov 2008, 22:09

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa mudrnudl »

ono nejde o to sa nieco naucit, nebojim sa toho a rad sa priucim a dokonca som presvedceny, ze hento budem za par rokov ovladat
lenze ja musim okolo toho programu spravit cely referat, a ked tam bude nieco comu nerozumiem, tak to nebudem vediet ani opisat...
jorg22
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1087
Registrovaný: 12 aug 2006, 20:39
Kontaktovať používateľa:

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa jorg22 »

Namiesto

Kód: Vybrať všetko

int a

musis dat

Kód: Vybrať všetko

float a
aby ti to vedelo nacitat aj desatinne cislo a potom zistis ci je to desatinne cislo takto:

Kód: Vybrať všetko

if((int)a != a)
//(int) znamena ze ti cislo a pretypuje na cele cislo, napr. 5.5658 bude 5
//potom zistujes ci (int)a je rovnake ako a
takze tvoj kod zmenis takto:

Kód: Vybrať všetko

while(cin.fail() || (int)a != a)
mudrnudl
Expert
Expert
Používateľov profilový obrázok
Príspevky: 193
Registrovaný: 22 nov 2008, 22:09

Re: c++ problem so zadanim celeho cisla

Príspevok od používateľa mudrnudl »

diky! tomu uz chapem
Napísať odpoveď