_getche() zeichen werden zweimal angezeigt



  • wieso kommt nach _getche das zeichen immer zweimal auffn schirm. wie kann ichs abstellen, brauchs nur 1 mal !



  • Poste mal Code, bitte.



  • #include <stdio.h>
    #include <conio.h>
    
    int AskOverwrite()
    {
    	int c = 0;
    	puts("Overwrite? y/n");
    	do
    	{
    		printf("\r");
    		c = _getche();
    	}while( c != 'y' && c != 'n' );
    	return c;
    }
    
    int main()
    {
    	int	c = AskOverwrite();
    
    	if ( c == 'y' )
    		puts("\nYES");
    	else
    		puts("\nNO");
    
    	getchar();
    return 0;
    }
    


  • Versuch mal das.

    Zeile 11: c = _getch();

    Besser?



  • leider nicht besser.
    dann wird ausgegeben:

    YES
    y

    oder
    NO
    n

    also genau andersrum als ich es gern hätte.



  • Ich verstehe nicht?

    Wieso willst du das eingegebene 'n' oder 'y' ausgeben?

    Und warum nimmst du Zeile 24: "getchar" anstatt "_getch"? Hat das irgendeinen Grund?

    Oder mal ganz allgemein gefragt: Was soll das ganze Programm eigentlich machen?



  • der benutzer soll sehen, was er auf dem bildschirm eingibt.
    das getchar ist nur dafür da, damit sich die konsole nicht sofort schliesst.



  • Dann ist doch die erste Variante perfekt.

    Wie sieht denn die Ausgabe da bei dir aus?



  • je nachdem, ob ich y oder n drücke:

    y
    YES
    y

    n
    NO
    n



  • der sich die haare rauft schrieb:

    wieso kommt nach _getche das zeichen immer zweimal auffn schirm. wie kann ichs abstellen, brauchs nur 1 mal !

    Hi Bruder, Haare noch dran ?
    Wenn du eh schon Microweich benutzst, dann nimm doch anstatt _getche z.B.
    ReadConsoleInput.
    Dem zweiten Parameter von ReadConsoleInput spendierst du nen zeiger auf INPUT_RECORD.
    Da ist auf den erstem Blick alles viel umständlicher. Im nachhinein lohnt es sich aber auf jeden fall. Du kannst damit auch Mauseingaben abfragen etc.
    Und es wird nichts doppelt angezeigt, so wie bei dem doofen _getch
    🙂



  • ^^ mag zwar alles richtig sein, löst aber das Problem nicht ganz.

    Bei mir ist die Ausgabe mit _getche:
    y
    Yes

    n
    NO

    und mit _getch:
    Yes

    NO

    Da frage ich mich doch, wieso bei dsdhr der Buchstabe nochmal angezeigt wird.
    Und nach meiner Erfahrung mit _getch und _getche, die im Übrigen noch nie Probleme breitet haben, darf das nicht passieren.

    Ich habe es mit VS 2008 Professional Edition ausprobiert. Mit welchen Compiler arbeitest du?



  • tatsächlich, es liegt am compiler.
    na toll, da soll mal einer drauf kommen. habe nen anderen compiler probiert und jetzt gehts.
    vc 6.0 hatte mich da geärgert.

    danke für die hilfe 🙂



  • kommando zurück!
    es liegt scheinbar am betriebssystem ! ich hatte das heute morgen auf der arbeit mit einem anderen compiler probiert und es lief wie erwartet.
    dieser andere compiler aber erzeugt mir hier zu hause ein programm mit der selben looser ausgabe.
    also
    n
    NO
    n
    😡
    das ist doch *****
    😃



  • 😃 Grin...

    Tja, da hat wohl jemand nicht richtig aufgepasst, als er so
    ein kleines Projekt wie DOS bzw. Windows programmierte. ^^

    Aber zum Glück passiert uns sowas nicht. 🤡



  • Chuck schrieb:

    😃 Grin...
    ...Aber zum Glück passiert uns sowas nicht. 🤡

    programmierfehler ??!! 😮
    niieemaaaals !!! 🤡


Log in to reply