Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » dezimalzahlfunction

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.06.2005, 20:21 Uhr
~petie
Gast


hi leute!!
gibt es eine funktion in c die erkennt ob die eingegebene zahl eine dezimalzahl oder ganze zahl ist.
Bitte um lösung!!!

Mfg piet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.06.2005, 20:33 Uhr
Lensflare



weiss nicht ob es sowas gibt, aber ich würde das als char-kette auslesen und prüfen, ob das zeichen "." oder "," drin vorkommt. wobei man beim komma dann natürlich nicht mehr die zahl als dezimalzahl auslesen kann.

das könnte dann ca. so aussehen (nicht getestet):

C++:
char test[100];

scanf("%s", &test);
getchar();

bool dezimal = false;

for(int i = 0; i < 100; i++)
{
  if(test[i] == '.')
  {
    dezimal = true;
  }
}

if(dezimal == true)
{
  printf("Die Zahl ist eine Dezimalzahl");
}
else
{
  printf("Die Zahl ist eine Ganzzahl");
}


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 10.06.2005 um 20:46 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.06.2005, 22:07 Uhr
ao

(Operator)



Zitat von Lensflare:
weiss nicht ob es sowas gibt, aber ich würde das als char-kette auslesen und prüfen, ob das zeichen "." oder "," drin vorkommt.

Ich auch, denn die andere Möglichkeit - als Float-Zahl einlesen und prüfen, ob es einen Nachkommateil != 0 gibt - funktioniert nicht zuverlässig; Rundungsfehler können das Ergebnis verfälschen.

@petie: Aber mal weiter gedacht: wie willst du hiermit umgehen: 10.0? Ganz- oder Kommazahl? Und was ist mit 1.0E3?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.06.2005, 22:26 Uhr
Pler
Einer von Vielen
(Operator)


Und wie wärs mit sowas:

C++:
scanf( %d,%d , &a , &b );



dann hätte man in a den Vorkommaanteil, und in b den Nachkommaanteil. Wenn b noch den vorinitialisierten wert hat, schmeisst mans einfach weg, und hat mit a die richtige zahl.
Ansonsten muss man sich eben aus a und b die richtige kommazahl bauen.

so oder so ähnlich

Dieser Post wurde am 10.06.2005 um 22:31 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.06.2005, 22:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nur wenn jemand nun das ding mit punkt eingibt: pech gehabt
evtl so:

scanf( "%d%c%d", &a, &zeichen &b )

und dann wenn zeichen == '.' oder ',', dann a,b ansonsten a
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.06.2005, 22:41 Uhr
Pler
Einer von Vielen
(Operator)


naja vom prinzip her ist das ja das gleiche
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.06.2005, 01:10 Uhr
Lensflare



oder so (diesmal getestet):

C++:
char test[100];

scanf("%s", &test);
getchar();

bool dezimal = false;

for(int i = 0; i < 100; i++)
{
  if(test[i] == '.')
  {
    i += 1;
    do
    {
      i += 1;
      if(test[i] >= '1' && test[i] <= '9') dezimal = true;
    } while(test[i]=='0' && i < 100-1);
  }
}

if(dezimal == true)
{
  printf("Die Zahl ist eine Dezimalzahl");
}
else
{
  printf("Die Zahl ist eine Ganzzahl");
}



weil ja nicht verlangt ist, dass die zahl in eine variable gespeichert werden soll.

das programm prüft also nur, ob eine zeichenkette ein komma hat und hinter dem komma eine ziffer ausser der 0 vorkommt, bis keine ziffer mehr kommt.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.06.2005, 13:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Ein scanf (also ein Lesen von der Standardeingabe) gleich zur Formatüberprüfung zu verwenden, ist nicht empfehlenswert: die eingabe könnte blocken. Generell ist es also zunächstmal so, daß man besser einen String eingibt und dann anschliessend prüft, ob er dem gewünschten Eingabeformat entspricht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.06.2005, 14:36 Uhr
Pler
Einer von Vielen
(Operator)


@virtual
dann vielleicht erst in einen String lesen, und danach mit sscanf auf das Format prüfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.06.2005, 15:39 Uhr
virtual
Sexiest Bit alive
(Operator)


genau.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: