Prüfen, ob Eingabe Int ist

Snowowl

Erfahrenes Mitglied
Hallo liebes forum!

Ich bin C++ Anfänger und möchte gerne prüfen, ob eine Eingabe über cin >> var eine Zahl, bzw. int ist. WIe kann ich das realisieren?

Danke für eure Hilfe,

Niklas
 
Nachdem du cin zum Einlesen verwendet hast, kannst du mit cin.fail() feststellen, ob die Eingabe erfolgreich war. Liefert cin.fail() true zurück ist das Einlesen fehlgeschlagen, bei false ist wurde richtig eingelesen. Also zum Beispiel:
Code:
#include <iostream>
using namespace std;

int main () {
    int a;
    
    cin >> a; 
    if ( cin.fail() ) 
       cout << "Einlesen fehlgeschlagen!" << endl;  
    else
        cout << a << endl;
        
    system("PAUSE");
    return 0;
}//main
 
Hi,

danke erstmal für deine Antwort!
Jedoch ist dies nciht genau, was ich suche.
Ich möchte ja nucht nur prüfen, ob eine Eingabe geschehen ist,
sondern auch, ob dies eine zahl ist. Wenn nicht, dann will ich
nämlich mit goto wieder woanders hin. ;)

Grüße,

Niklas
 
Es macht wahrscheinlich keinen Sinn dir zu sagen das GOTO im Normalfall ein absolutes Tabu ist, aber ich sags dir trotzdem ;)
 
Zuletzt bearbeitet:
Ja im Normalfall lässt sich ein absoluter Sprung durch strukturiertes Programmieren verhindern. Zum Beispiel mit Hilfe von Schleifen, IF-Abfragen, Funktionen etc.
 
hey,
erstmal zu deinem problem mit der int überprüfung.
es gibt konvertierungs- und klassifizieruntgsroutinen mit den du eine variable überprüfen kannst.


#include <ctype.h>
#include <iostream>
unsing namespace std;
...
int izahl = 0;

if (isdigit(izahl)) {
cout<<"izahl ist eine zahl");
}
else {
cout<<"fehler";
}
...

vielleicht löst du dein problem bei goto durch escapesequenzen ?
könntest dir ja funktionen schreiben wie z.b. setcoord(x, y)


mfg adam
 
Hi,
ich hab das gleiche Problem und habe micht für die Lösung von xFile entschieden jedoch gibts da noch ein Problem...
Ich hab frage vom Benutzer eine Zahl ab, falls er aber was anderes als eine Zahl eingibt dann soll er wieder und wieder gefragt werden bis er es richtig macht. Nunja dann habe ich folgendes geschrieben:

Code:
           while(isdigit(iZahl1))
           {
            cout<<"Sie haben eine ungueltige Zahl eingegeben! Versuchen Sie es erneut.\n";
            cout<<"Eingabe: ";
            cin>>iZahl1;
           }

Jetzt ist das aber irgendwie eine endlosschleife und er gibt die ganze zeit "Sie haben eine..." aus und zur erneuten Eingabe komme ich gar nicht mehr. Wisst ihr vllt wo der fehler ist?

Gruß
 
Hi,
ich hab das gleiche Problem und habe micht für die Lösung von xFile entschieden
Die Lösung von xFile ist nicht gerade günstig.

Die Funktion isdigit überprüft wie der Name schon sagt ein einzelnes Zeichen darauf ob es eine Ziffer ist. Du möchtest allerdings prüfen, ob der Benutzer eine Zahl eingegeben hat.

Dein Problem entsteht dann letztlich dadurch das der Eingabestream cin in einem Fehlerzustand ist. Und von einem Stream im Fehlerzustand kann nichts mehr eingelesen werden. Du mußt den Zustand des Stream wieder zurücksetzen um wieder etwas einlesen zu können.

C++:
int zahl;

do {
  cout << "Eingabe: ";
  if (cin >> zahl) {
    // hat geklappt => raus aus der schleife
    break;
  } else if (!cin.bad() && !cin.eof()) {
    cerr << "Sie haben eine ungueltige Zahl eingegeben! Versuchen Sie es erneut.\n";
    cin.clear(); // Fehlerzustand zurücksetzen
  }
} while (cin);
Gruß
 
Zuletzt bearbeitet:
Zurück