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

Pixel-Wizard

Frischling

  • »Pixel-Wizard« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

1

21.11.2012, 13:17

Fehler bei Buchstabeneingabe beheben

Hallo miteinander

Ich bin gerade daran eine einfache Konsolen-Datenbank zu erstellen bzw. ich bin schon fertig.
Im Moment bin ich noch am Bugfixen dran und bei einem Punkt komme ich einfach nicht weiter!

Ich habe ein Menü erstellt und dabei eine menuewahl-Variabel des Datentyps int deklariert.

Wenn man nun einen Buchstaben eingibt kommt die Meldung "Eingabe Falsch" was ja auch gut ist, aber man bringt diese Meldung nicht wieder weg...

Ich habe Printscreens gemacht welche im Anhang sind!

Hat jemand eine Lösung dass die "Eingabe Falsch" Meldung nur einmal kommt und man danach eine neue Eingabe machen kann?

Unten ist noch der Quelltext

Ich hoffe auf Hilfe

Liebe Grüsse
Rumeos

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
do{
    system("cls");

    cout << "Menue:" << endl;
    cout << "------" << endl;
    cout << "1 - Datenbank anzeigen" << endl;
    cout << "2 - Eintraege erfassen" << endl;
    cout << "3 - Optionen" << endl;
    cout << "4 - Credits" << endl;
    cout << "5 - Hilfe" << endl;
    cout << "6 - Beenden" << endl;
    cout << "\nAuswahl: ";
    cin  >> menuewahl;
    fflush(stdin);

    switch(menuewahl)
    {
    case 1:
        zeigeDatenbank(); 
        break;
    
    case 2:
        erfasseEintrag();
        break;

    case 3:
        komplexität = optionenMenü();
        break;

    case 4:
        zeigeCredits();
        break;

    case 5:
        zeigeHilfe();
        break;
    
    case 6:
        break;

    default:
        cout << "Falsche Eingabe!" << endl;
        getchar();
        break;
    }
    }while(menuewahl != 6 || static_cast<char>(menuewahl) != 'b');
»Pixel-Wizard« hat folgende Bilder angehängt:
  • prt1.png
  • prt2.png
  • prt3.png
  • prt4.png
Träume werden wahr, wenn du sie war werden lässt.


2

21.11.2012, 14:01

Hier mal im "Pseudocode":

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool correct=false, bool ErsterDurchgang=true; //Mal zur Hilfe mit reingepackt
Ne Schleife, am besten while
    Schon einen Fehler gehabt oder erst der Erste Durchgang?
        Ausgeben, dass eine falsche Eingabe stattfand, Zeilenumbruch anfügen
    std::cout << "Eingabe: ";

    Wir gehen hier mal von aus, dass die Eingabe richtig sein wird

    switch(AuswahlDesMenüs)
    {
        case 1: zeigeDatenbank(); break;
        case 2: //und so weiter...
        default: BAH! Macht der einen Fehler. Eingabe wieder falsch.
    }
}
//Uninteressanter Kram


MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

21.11.2012, 14:08

Welchen Datentyp hat "menuewahl"? Wenn es ein Char ist, was ich aufgrund der letzten Zeile vermute, dann liegt der Fehler daran, dass
1 != '1'
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Pixel-Wizard

Frischling

  • »Pixel-Wizard« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

4

21.11.2012, 14:11

Vielen Dank

@check: Werde es mal checken ob es nun geht :)

@BlueCobold: "menuewahl" hat den Datentyp Integer. In der letzten Zeile habe ich nur versucht in char zu casten...
Träume werden wahr, wenn du sie war werden lässt.


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

21.11.2012, 14:14

Dann kann die Schleife allerdings nie verlassen werden, weil man 'b' gar nicht eingeben kann (außer man gibt "98" ein, was ich eher merkwürdig finde).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

21.11.2012, 14:14

Was soll flush bei einem inputstream bringen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
std::cin >> input;
while(!std::cin)
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Fehlerhafte Eingabe!" << std::endl;
    std::cin >> input;
}
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

7

21.11.2012, 14:30

Oder so..

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
std::string menuewahl;
std::getline(std::cin, menuewahl);

...

case "1":
...
case "2":
..

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

21.11.2012, 14:32

Schonmal versucht das zu kompilieren?^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

9

21.11.2012, 14:35

Ok war ein Schnellschuss,
muss erst in int konvertiert werden oder if statement benutzen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

21.11.2012, 14:40

...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige