Integercheck



  • Hallo,

    nehmen wir an wir haben folgendes einfaches Programm:

    #include <iostream.h>
    
    int a=0;
    
    void main()
    {
    cout << "Bitte geben Sie eine ganze Zahl ein: ";
    cin >> a;
    
    if(cin.fail())
    {
    cin.clear();
    a=0;
    cout << "Keine ganze Zahl eingegeben!";
    } else {
    cout << "OK!";
    }
    }
    

    Die Lösung über cin.fail() und cin.clear() funktioniert gut, wenn statt einer Int irgendwelche Buchstaben, Klammern oder sonstiges eingegeben wird!

    Problem: Wenn ich allerdings ein Kommazahl eingebe, z.B. "1.5", spricht cin.fail() nicht an, sondern setzt a = 1;
    Es dürfen aber NUR ganze Zahlen eingegeben werden. Wie kann ich das realisieren?


  • Administrator

    Das einzige was mir aktuell einfallen würde, ist die Sache über einen zweiten Schritt zu prüfen.

    #include <string>
    #include <sstream>
    #include <iostream>
    
    int main()
    {
    	int a;
    	std::string line;
    
    	// Ganze Zeile einlesen, damit wir auch alles haben.
    	std::getline(std::cin, line);
    
    	// Auslesen
    	std::istringstream iss(line);
    	iss >> a;
    
    	// Prüfen, ob wir das Ende des Streams erreicht haben.
    	// Dies muss der Fall sein, wenn wir alles verwendet haben.
    	if(iss.eof())
    	{ std::cout << "Good!" << std::endl; }
    	else
    	{ std::cout << "Bad!" << std::endl; }
    
    	return 0;
    }
    

    Grüssli



  • Zudem: Folgende Dinge in deinem Code sind nicht C++:

    #include <iostream.h>
    

    Header der C++-Standardbibliothek haben keine Endungen. Du solltest also <iostream> inkludieren. Beachte dazu, dass sich die Dinge dann im Namensraum std befinden.

    void main()
    

    Das war auch nie Standard-C++! Die main() -Funktion hat immer den Rückgabetyp int .

    Einrückung wäre übrigens auch nicht das Schlechteste. 😉



  • Danke @ Dravere für die Lösung! Eine einfachere Lösung bietet C++ nicht? Bin enttäuscht *g*

    @Nexus: Danke für den Hinweis, wieder was gelernt! Das mit dem Einrücken hingegen hätte ich normalerweise schon gemacht, hätte ich zuvor gewusst, dass diese erweiterte phpBB Version diese Einrückungen auch so schön darstellt 🙂



  • @ Nexus: Header der C++-Standardbibliothek haben keine Endungen.
    Wer sagt denn sowas?


  • Administrator

    daddeldu schrieb:

    @ Nexus: Header der C++-Standardbibliothek haben keine Endungen.
    Wer sagt denn sowas?

    Der ISO C++ Standard sagt dies.

    Grüssli


Anmelden zum Antworten