2 Stimmen

Die Eingabe in meinem Programm funktioniert nicht richtig. Wie kann ich das beheben?

Ich habe einige Probleme mit cin. Wenn ich anstelle einer Ganzzahl ein Zeichen eingebe, funktioniert cin nicht mehr, und danach kann ich nicht einmal einen neuen Wert eingeben. Was soll ich tun? Ich habe bereits versucht fflush(stdin)

struct PersonList
{
    Person person;
    PersonList* personListPtr;
};

void addPerson(PersonList*& ptr, int position);
void deletePersonList(PersonList* ptr);

int main()
{
    PersonList* personListPtr = NULL;

    int flag = 0;
    int pos = 0;
    int i;

    while(flag != 27)
    {
        system("cls");
        cout << "1 - Objekte hinzufügen\n"
            << "2 - Objekte löschen\n"
            << "ESC - beenden\n";
        switch(flag)
        {
        case '1':
            cout << "Position eingeben: ";
            **cin >> pos;**
            addPerson(personListPtr, pos);
            break;
        case '2':
            break;
        case '3':
            break;
        }
        flag = _getch();
    }

    deletePersonList(personListPtr);

    return 0;
}

Danke.

0voto

James Kanze Punkte 146902

Sie scheinen mehrere Redewendungen zu vermischen. Ich weiß nicht, was _getch() macht, aber ich kann mir nicht vorstellen, dass es in irgendeiner Weise kompatibel mit std::cin ist; std::cin wird möglicherweise im Voraus gelesen haben, Ihren Flag-Zeichen beispielsweise. Sie können nicht einfach verschiedene Streams aus der gleichen Quelle mischen.

Was das spezielle Problem betrifft, das Sie beschreiben, sobald Sie etwas eingeben, das nicht in das umgewandelt werden kann, was Sie lesen, geht der Stream in einen Fehlerzustand über (den Sie überprüfen sollten, bevor Sie den Wert verwenden), und alle Operationen auf ihm werden zu No-Ops, bis Sie den Fehler beheben (std::istream::clear()). Aber das wird die anderen Probleme nicht lösen. Wenn Sie darauf bestehen, etwas wie _getch() zu verwenden, müssen Sie es für alle Ihre Eingaben verwenden, indem Sie einen String für die Positionseingabe erstellen und std::istringstream verwenden, um ihn umzuwandeln. Je nachdem, was die Funktion tatsächlich macht, müssen Sie möglicherweise auch mit Dingen wie Rücktaste, Eingabetaste und möglicherweise auch Echo umgehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X