Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Eingabe auf Zahlen beschränken

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
16.06.2012, 00:03 Uhr
banshee



Hallo,

wie kann ich denn eine Variable über std::cin einlesen (oder von mir aus auch mit anderen Funktionen, falls das einfacher geht) und alle Fehleingaben, die keine positiven Zahlen sind abfangen? Insbesondere sollen also auch mehrstellige Zahlen erlaubt sein. Dementsprechend hilft mir isdigit() hier auch nicht weiter, wenn ich sie nicht ziffernweise parsen will.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2012, 14:27 Uhr
Napsta



Guten Tag,

wenn ich dich richtig verstanden habe, dann würde dir hier die Ausnahmebehanlung weiter helfen, um eine falsche Eingabe abzufangen und eine if - Abfrage um zu überprüfen ob die Zahl positiv oder negativ sind.

Sprich:


C++:
#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    double eingabe;

    try
    {
        cin.exceptions(ios_base::failbit);

        cout << "Geben Sie bitte eine Zahl ein: ";
        cin >> eingabe;

        (eingabe <= 1) ? cout << "Bitte geben Sie eine Positive Zahl ein\a\n" : cout << "Ihre Eingabe: " << eingabe;
    }
    catch(ios_base::failure & e)
    {
        cout << "Falsche eingabe\n";
        return 0;
    }
    return 0;
}



MFG Napsta

Dieser Post wurde am 16.06.2012 um 14:31 Uhr von Napsta editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.06.2012, 22:50 Uhr
Hans
Library Walker
(Operator)


Hi,

keine Ahnung, ob es sowas in der Standardbibliothek schon fertig gibt. Möglicherweise in den Boost-Bibliotheken, aber da kennt sich Beefy besser aus. (Oder Du guckst mal hier oder hier.) Ansonsten würde es mich auch nicht wundern, wenn Du um isdigit() & Co. nicht herum kommst...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.06.2012, 14:52 Uhr
banshee



Danke soweit, ich habe meinen Einlesemechanismus jetzt aber auf ifstream umgestellt und das Problem damit weitestgehend umgangen. Aussehen tut es so:


C++:
int idx1, idx2;
    float* datum = new float[dataLen];

    while (file.good())
    {
        file >> idx1 >> idx2;
        claimedIDs->push_back(idx1);
        trueIDs->push_back(idx2);

        for (int i = 0; i < dataLen; i++)
        {
            file >> datum[i];
        }
        data->push_back(datum);
    }


Ein sehr heimtückischer Fehler ist allerdings eine zusätzliche Leerzeile am Ende der Datei, der mir, Gott sei Dank, noch aufgefallen ist. In dem Fall wird der letzte Datensatz einfach doppelt geschrieben.
Wie kann ich denn sowas bzw. nicht formatkonforme Zeilen abfangen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.06.2012, 11:14 Uhr
TOSHMAX



Ganz einfach:

C++:
file >> idx1;
if(!file) { // oder file.fail()
    // komplette Zeile überspringen und mit file.clear()
    // das failbit löschen oder Verarbeitung abbrechen
}

Alternativ könntest du auch mit std::ifstream::exceptions eine Exception auslösen lassen sobald Fehler auftreten.
 
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: