Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit switch

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 < [ 2 ]
000
01.01.2007, 15:53 Uhr
~Suba Esel
Gast


Hallo,
ich habe auf dem Taschenrechner TI Voyage 200 ein "Spiel" programmiert. Da ich in der Schule in einer C++ - AG bin, wollte ich dieses "Spiel" auf den Computer übertragen. Das ist mir soweit auch gelungen. In dem "Spiel" geht es darum, sich zu entscheiden, wo man hingeht, und alle Buchstaben eines Passworts herauszufinden. Mein Problem ist nun, bei der Frage "Wohin willst du gehen?" falsche Eingaben abzufangen. Mit Zahlen funktioniert das auch sehr gut, sobald man jedoch einen Buchstaben eingibt, wiederholt das Programm zwar die while - Schleife, lässt aber die Eingabe nicht mehr zu.


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

void Nseite();
void Kreuzung();

std::string passwort;

int main()
{
    srand(time(0));
    for (int i = 0; i < 12; ++i)
    {
        passwort += char( rand() % 26 + 65 );
    }
    std::cout << "Willkommen zu Ewaldt I!" << std::endl << "Der Bootsmann";
    Nseite();
    Kreuzung();
}

void Kreuzung()
{
    std::cout << "Du stehst an einer Kreuzung in der N\204he eines Flusses.";
    Nseite();
    while (true)
    {
        std::cout << "Wohin willst du gehen?" << std::endl
        << "1 = Zum Fluss" << std::endl
        << "2 = In die Stadt" << std::endl
        << "3 = Zum Bootsanleger" << std::endl
        << "4 = Zum Ende" << std::endl;
        int eingabe;
        std::cin >> eingabe;
        system("cls");
        switch(eingabe)
        {
            case 1:
                std::cout << "Fall 1";
                Nseite();
                break;
            case 2:
                std::cout << "Fall 2";
                Nseite();
                break;
            case 3:
                std::cout << "Fall 3";
                Nseite();
                break;
            case 4:
                std::cout << "Fall 4";
                Nseite();
                break;
            default:
                system("cls");
                continue;
        }
        getch();
        break;
    }
}

void Nseite() // leert Bildschirm nach Tastendruck
{
    getch();
    system("cls");
}




Ich habe hier nur einen kleinen Teil des Quellcodes gepostet, weil 983 Zeilen vielleicht etwas zu viel wären.....

P.S.: Frohes neues Jahr!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.01.2007, 16:29 Uhr
xXx
Devil


Such mal nach "cin int" ... Forumsuche...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.01.2007, 23:48 Uhr
~Suba Esel
Gast


Tut mir leid, ich hab nicht so wirklich was zu dem Thema gefunden, weder im Forum noch bei google.... könntest du mir das vielleicht in einfachen Worten erläutern? Ich bin noch nicht so wirklich erfahren in C++....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.01.2007, 00:13 Uhr
-Biohazard-



Bei default kein continue, sondern break einbauen

PS: using namespace std ist praktischer
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.01.2007, 00:39 Uhr
~Suba Esel
Gast



das erklärt zwar, warum das nicht ging
allerdings besteht das Problem weiterhin^^



C++:
while (true)
    {
        std::cout << "Wohin willst du gehen?" << std::endl
        << "1 = Zum Fluss" << std::endl
        << "2 = In die Stadt" << std::endl
        << "3 = Zum Bootsanleger" << std::endl
        << "4 = Zum Ende" << std::endl;
        int eingabe;
        std::cin >> eingabe;
        system("cls");
        switch(eingabe)
        {
            case 1:
                std::cout << "Fall 1";
                Nseite();
                break;
            case 2:
                std::cout << "Fall 2";
                Nseite();
                break;
            case 3:
                std::cout << "Fall 3";
                Nseite();
                break;
            case 4:
                std::cout << "Fall 4";
                Nseite();
                break;
            default:
                std::cout << "Diese M\224glichkeit gibt es leider nicht.";
                Nseite();
                // break; muss gar nicht sein, da das Programm sowieso in der nächsten Zeile weitergeht
        }
    }



wie gesagt, wenn ich jetzt eine "falsche" Zahl eingebe, zeigt er an "Diese Möglichkeit gibt es leider nicht" und fordert eine neue Eingabe. Wenn man dagegen einen Buchstaben oder ein Zeichen eingibt, zeigt er ebenfalls "Diese Möglichkeit gibt es leider nicht" an, startet die while -schleife neu, lässt aber keine eingabe mehr zu, sondern macht gleich bei dem switch weiter.

using namespace std; hab ich nicht benutzt, weil ich möglichst wenig in mein Programm einbauen möchte, was ich noch nicht kenne. Ich weiß nicht genau, was ein namespace ist, was er bewirkt und welche es gibt.

ach übrigends: ich hatte eben das Problem, dass mein Sicherheitscode nicht akzeptiert wurde, obwohl ich den richtig eingegeben habe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.01.2007, 00:49 Uhr
-Biohazard-



Die einfachste Lösung:
eingabe = getch(); anstatt cin >> eingabe;
Wenn du willst kannst du mit std::cout noch anzeigen welchen Buchstaben du da gerade eingetippt hast.
In diesem Sinne

--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.01.2007, 09:56 Uhr
-Biohazard-



Und mit cin.get() kannst du auch noch Enter drücken lassen
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.01.2007, 10:48 Uhr
xXx
Devil


Ich meinte eigentlich www.fun-soft.de/showtopic.php?threadid=16812 aber egal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.01.2007, 12:45 Uhr
~Suba Esel
Gast


@-Biohazard-: Herzlichen Dank, mit getch() funktionierts
allerdings muss man dann statt case 1: case 49: usw. benutzen
wenn ich cin.get() nehme, macht er bei jedem switch erst das richtige und dann default
Außerdem hat getch() den Vorteil, dass man auf jeden Fall nur eine Sache eingeben kann

@xXx: Danke für den Link, aber ich verstehe das Programm nicht so wirklich^^

übrigens ging mein Sicherheitscode schon wieder nicht^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.01.2007, 17:14 Uhr
Tommix



Hallo,

Zitat von ~Suba Esel:

allerdings muss man dann statt case 1: case 49: usw. benutzen


Schreib lieber case '1': usw.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


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: