Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.02.2009, 18:15

Char und Komma eingaben abfangen

Hallo,
ich habe eine Art Ticketautomaten mit der Console geschrieben, und jetzt have ich jedoch ein paar kleine Problemchen...

Ich habe am Anfang zwei "Eingabefelder", welche Ticketart (also 3-Stunden-Karte, Tageskarte, Wochenendkarte und Jahreskarte) sowie die Anzahl der gekauften Karten abfragt.

Die einzelnen Kartentypen haben jeweils eine Nummer (1-4 eben), also ein int Variable. Man gibt nun zuerst eine Nummer von 1-4 ein, wenn es irgendeine andere (gerade!) Zahl ist, wird es abgefangen, eine Fehlermeldung kommt, und es wird der Kartentyp erneut abgefragt.

Jedoch wenn ich einen Buchstaben, einen String oder eine Kommazahl eingebe bei der Kartenart oder der Anzahl der Karten, kommt eine Endlosschleife...
Wie kann ich bei der Abfrage schon eine Absicherung einbauen, dass bei einem char, string oder float Eingabe eine Fehlermeldung kommt, und das Programm sauber beendet wird.

Ich dachte an soetwas in der Art, das funktioniert aber nicht (nicht lachen :) )

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        cout<<"Welche Ticketart (1-4) moechten Sie kaufen? : ";
    cin>>Auswahl;

        //Hier kommt jetzt das, wie ich es mir vorstelle so ungefähr

        if (Auswahl == char) || (Auswahl == float)
        {
             cout<<"Fehler! Das Programm wird jetzt beendet" <<endl;
             return (0);
         }

    cout<<"Wie viele Tickets moechten Sie kaufen?      : ";
    cin>>Anzahl;

    if (Anzahl <= 0)
    {
        Anzahl = 1;
    }
------------------

Jonny :)

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

2

16.02.2009, 18:22

ich weiss net... aber bei solchen sachen greif ich gerne auf scanf() zurück, ist angenehmer und du hast das problem nicht ;)
und auch printf() für die ausgabe wäre bei dir evtl. angebracht, die ganzen leerzeichen hier zu spammen^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

16.02.2009, 18:26

suchst du sowas:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  cout << "Welche Ticketart (1-4) moechten Sie kaufen? ";
  cin >> Auswahl; 

  if (cin.fail())
  {
    cout << "Fehler! Das Programm wird jetzt beendet" << endl;
    return 0;
  }

  int Anzahl = 0;
  cout << "Wie viele Tickets moechten Sie kaufen? ";
  cin >> Anzahl;

  if (Anzahl <= 0) 
  { 
    Anzahl = 1;
  }

4

16.02.2009, 18:30

Was machst dieses cin.fail genau?
Ich möchte halt einfach irgendetwas, was mir mein Programm abfängt, wenn
keine Integerwert eingegeben wurde, da es sonst in so eine komische Endlosschleife gerät.

Also etwas, was bei diesen bestimmten Eingaben bei einer char oder float Eingabe das programm sauber beendet.
------------------

Jonny :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

16.02.2009, 18:42

basic_ios::fail() gibt true zurück wenn das failbit und/oder das badbit im error state vom streampuffer gesetzt sind.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

16.02.2009, 18:43

fail() fragt ab ob das failbit des stream gesetzt wurde. das ist z.b. der fall wenn >> etwas einliest was nicht als der gefragte typ interpretiert werden kann...

7

16.02.2009, 19:18

Cool vielen Dank genau so etwas habe ich gesucht.
Ich danke euch :D
------------------

Jonny :)

Werbeanzeige