Fehler bei Char-Funktion



  • Hmm, also des mit int geht leider net. Außer du zeigst mir ne andere Möglichkeit wie man dan Buchstaben abfängt, falls das der Anwender eingeben will. Bei mir kommt dann immer ne Endlosschleife und des sieht net schick aus.

    Zur Möglichkeit 2 wie überprüf ich denn ob er beim zweiten scanf die zeichenkette abschließt?
    Vorallem wird das überhaupt automatisch abgeschlossen?

    PS(fflush(stdin): Ich will aber meine Note nicht gefärden. Würd ich das Programm für mich schreiben (was ich u.a. auch tue) und es nicht bewertet würde, dann würd ich den anderen Vorschlag gern annehmen und verwenden.

    MfG



  • Möglichkeit:
    Du könntest getche() verwenden;
    Dann bekommst du genau ein Zeichen als eingabe...



  • GlobalDeeJay schrieb:

    Hmm, also des mit int geht leider net.
    ...

    Warum sollte das nicht gehen, du brauchst nur char menue durch int menue
    zu ersetzen und den scanf Befehl wie von CStoll beschrieben anzupassen.



  • Wie fang ich dann Buchstaben und Sonderzeichen ab?
    Also bei mir kommt dann immer ne Endlosschleife...

    MfG



  • Vermutlich musst du noch die while Schleife anpassen ?

    while(menue < 0 || menue > 3)
    


  • Ja wenn du mir sagst wie man sie korrekt anpasst. So dass man wirklich NUR diese 3 Zahlen eingibt und die Schleife weder von Buchstaben noch von Sonderzeichen unterbrochen wird...

    MfG

    Edit: SO hat ichs ja zu Anfang... Eben nur mit do{}while



  • Hm, bei mir wird da nichts unterbrochen:

    int menueeinundausgabe()
    {
    	int menue;
    
    	do
    	{
    
    		printf("\nKlicken Sie:\n\n0 Beenden\n1 Info\n2 Spieler vs. Spieler\n3"
    													" Spieler vs. Computer\n");
    		while ((menue = getchar()) != EOF && menue != '\n');
    
    	    scanf("%d", &menue);
    	    system("cls");
        }
    	while( menue < 0 || menue > 3 );
    
        return menue;
    }
    
    int main()
    {
    	printf("%d\n", menueeinundausgabe());
    	return 0;
    }
    


  • Sorry, hast Recht, das hakt ab und an mal.



  • proggingmania schrieb:

    Sorry, hast Recht, das hakt ab und an mal.

    Ja leider...
    Aber trotzdem danke 🙂



  • Habs nochmal probiert, die Falle bzw. der Haken liegt wohl am Datentypen.
    Wenn menue signed int ist, dann wird es bei der Eingabe eines Zeichens, das keine Zahl ist, negativ.

    int menueeinundausgabe()
    {
        unsigned int menue;
    
        do
        {
           printf("\nKlicken Sie:\n\n0 Beenden\n1 Info\n2 Spieler vs. Spieler\n3"
                                                       " Spieler vs. Computer\n");
    	   fflush(stdin);
    		scanf( "%d", &menue );
            system("cls");
        }
        while( menue < 0 || menue > 3 );
    
        return menue;
    }
    
    int main()
    {
        printf("%d\n", menueeinundausgabe());
        return 0;
    }
    

    So dürfte es nu funzen 🙂



  • k:\backup\thomas\schule\test\test.cpp(23) : fatal error C1010: Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei

    Ähhhhhh, was bedeutet des? Ich hab nur den Code von dir mal in den Compiler reingeschmissen. Also die Klammern stimmen.
    Aber mal so: Auf Buchstaben reagiert es doch immernoch mit ner Endlosschleife oder?

    Edit:
    Oki, vergess es... Hab die Header ja garnich included *schäm*



  • Cool, des funktioniert sogar... daaaaaaaaanke...
    Aber tust mir noch nen Gefallen und sagst mir warum des jetzt auf einmal geht?
    *lieb frag*



  • Buchstaben werden quasi ingoriert und es wird weiter abgefragt.
    Also quasi ist das ne Endlosschleife, bis eine Zahl von 0 bis 3 eingegeben wird.



  • Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei ...
    Das ist Visual Studio Standardeinstellung.
    Kannst du bei Projekt/Einstellungen/C++/Vorkompilierte Header
    deaktivieren durch setzen des entsprechenden Radio Buttons einstellen.



  • proggingmania schrieb:

    Buchstaben werden quasi ingoriert und es wird weiter abgefragt.
    Also quasi ist das ne Endlosschleife, bis eine Zahl von 0 bis 3 eingegeben wird.

    Des versteh ich schon. Aber ich schwöre bei Gott, ich hatte des mal so ähnlich, auch die Eingabe über integer und die Abfrage obs denn auch die Zahlen sind. Und als ich zum Beispiel a eingegeben hatte kam die Endlosschleife... warum ach immer.
    Des irritiert mich jetzt n bissl. Aber trotzdem danke 🙂

    Kannst du bei Projekt/Einstellungen/C++/Vorkompilierte Header
    deaktivieren durch setzen des entsprechenden Radio Buttons einstellen.

    Ähm... Bringt mir des einen Vorteil? Wenn der doch merkt dass ne header fehlt dann funzt des Prog doch eh net korrekt oder?



  • GlobalDeeJay schrieb:

    Cool, des funktioniert sogar... daaaaaaaaanke...
    Aber tust mir noch nen Gefallen und sagst mir warum des jetzt auf einmal geht?
    *lieb frag*

    Tja, das frage ich mich auch gerade.



  • Tja, das frage ich mich auch gerade.

    Hmm...Schau mal in die Zeile 9 deines letzten Codes... CStoll wird dich dafür hassen *gg*
    Naja, aber wie heißt? Don't change a running System, dann lass ma des bei Code einfach auch so 🙂
    Soll ja recht sein wenns funzt, wenn du rausfindest wieso wärs toll. Ich gebs auf. Zu viel Codes am Morgen :S



  • proggingmania schrieb:

    GlobalDeeJay schrieb:

    Cool, des funktioniert sogar... daaaaaaaaanke...
    Aber tust mir noch nen Gefallen und sagst mir warum des jetzt auf einmal geht?
    *lieb frag*

    Tja, das frage ich mich auch gerade.

    bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.



  • bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.

    Naja... abers funktioniert mit dem undefinierten Verhalten... 🙂



  • GlobalDeeJay schrieb:

    bestimmts liegt's am 'fflush(stdin)' --> undefiniertes verhalten.

    Naja... abers funktioniert mit dem undefinierten Verhalten... 🙂

    ja, manchmal ....
    😃


Anmelden zum Antworten