Software > Programmieren und Coding

[C++] Abfragen, ob eine Floatzahl eingegeben wurde

<< < (2/3) > >>

nemon:
du kannst einen float nicht von vorne nach hinten durchgehen und ein "." suchen. in einem float wird ein komma nicht als komma gespeichert, es gibt einen bereich aus den vorderen bits mit ganzzahliger bedeutung und ein teil der hinteren bits, die die nachkommastellen ausdrücken.

und nein, ich poste hier keinen code, das musst du dir schon selber zurechtbasteln, ist ja auch keine allsu schwere aufgabenstellung.

Gargamel:
Ok, ich gebe zu, ich hab den Code gestern nicht getestet. Ich vermute mal, wenn man "2.75" eingibt, läuft das wie folgt ab:

Das Einlesen der ersten Zahl mit "cin>>n" liest die Zeichen '2' und '.' von der standard-Eingabe. Beim Zeichen '.' merkt der Parser, dass dieses Zeichen nicht zu einer natürlichen Zahl passt und beendet das einlesen. Das Zeichen '.' wird dann wahrscheinlich in den Eingabepuffer zurückgeschickt, mit einem einzelnen Zeichen ist das üblicherweise möglich. Die Variable "n" erhält also den Wert "2".
Nun wird das Einlesen der zweiten Zahl mit "cin>>m" gestartet. Im Eingabepuffer befinden sich aber noch die verbleibenden Zeichen, nämlich ".75". Was der Parser nun macht, wenn die Zeichenkette nicht mit einer Ziffer beginnt, weiß ich nicht. Vielleicht solltest du mal in ein Buch über C++ gucken, ob da das Verhalten von den Eingaberoutinen genauer erklärt ist. Also im Endeffekt suchst du den ">>" Operator aus der Klasse "std::istream" mit Rückgabetyp "int".

Edit: Tatsächlich suchst du die Beschreibung zu "istream& operator>> (int& val )". Ich hatte schon wieder vergessen, dass bei C++ ja alles mögliche über Referenzen gelöst wird. :nut: Heftige Sprache zum Einstieg in die Programmiererei...

BTW: Ich glaube statt

--- Code: ---#include <stdio.h>
#include <iostream.h>

--- Ende Code ---
wäre folgendes besser:

--- Code: ---#include <iostream>
using namespace std;

--- Ende Code ---

Zeh Emm:

--- Zitat von: Gargamel am 22. Mai 2008, 12:51:29 ---Edit: Tatsächlich suchst du die Beschreibung zu "istream& operator>> (int& val )". Ich hatte schon wieder vergessen, dass bei C++ ja alles mögliche über Referenzen gelöst wird. :nut: Heftige Sprache zum Einstieg in die Programmiererei...

BTW: Ich glaube statt

--- Code: ---#include <stdio.h>
#include <iostream.h>

--- Ende Code ---
wäre folgendes besser:

--- Code: ---#include <iostream>
using namespace std;

--- Ende Code ---

--- Ende Zitat ---

Koennte dies erklaeren, warum mir der g++-Compiler unter Ubuntu eine warning ueber veraltete Header aussspuckt?

@nemon: Erinnert mich an Informatik1. :)

Gargamel:

--- Zitat von: Claas M am 22. Mai 2008, 13:35:26 ---Koennte dies erklaeren, warum mir der g++-Compiler unter Ubuntu eine warning ueber veraltete Header aussspuckt?

--- Ende Zitat ---
Jaaaa!

Und immer schön "g++ -Wall" benutzen...  :wink:

Zeh Emm:
g++ Wall?

Aber ich hatte vorhin die ultimative Idee:
-Ich lese die Variable als float aus.
-ich generiere eine Hilfsvariable, die den auf int gecastete float hat.
-wenn float-var - Hilfsvar > 0 : Fehlerausgabe...

Leider erhalte ich hier momentan keinerlei Ausgabe, nicht einmal ein simples cout<< geht... komisch, komisch alles... nacher mal bei mir zuhause testen... wohooo....

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln