Eingabe ohne Enter



  • hallo miteinander,

    ich habe ein Programm, in welchem ich in einem
    kleinen Feld ein Zeichen bewegen lassen möchte.
    Ich gehe z.B. mit der Taste d nach rechts.

    Mein Problem ist nun, dass ich nachdem ich mein Zeichen
    (Bsp. d) eingegeben habe noch enter drücken muss.

    Kann man dies irgendwie umgehen, dass man direkt nach dem
    Zeichen eine Änderung bekommt?

    int main()
    {	char zeichen;
    	char feld[5][5] = { { 'X' } };
    	int z=0, l=0;
    	int dauer=1;
    
    	feld[z][l] = 'X';
    
    	do{
    		for (int k = 0; k < 5; k++){
    
    			for (int j = 0; j < 5; j++){
    
    				printf("%c", feld[k][j]);
    			}
    			printf("\n");
    		}
    
    		scanf("%c", &zeichen);
    		fflush(stdin);
    
    		switch (zeichen){
    		case 'w':
    			feld[z - 1][l] = 'X';
    			feld[z][l] = ' ';
    			z -= 1;
    			break;
    		case 'a':
    			feld[z][l - 1] = 'X';
    			feld[z][l] = ' ';
    			l -= 1;
    			break;
    		case 'd':
    			feld[z][l + 1] = 'X';
    			feld[z][l] = ' ';
    			l += 1;
    			break;
    		case 's':
    			feld[z + 1][l] = 'X';
    			feld[z][l] = ' ';
    			z += 1;
    			break;
    		}
    		system("cls");
    	} while (dauer == 1);
    
    	system("pause");
    	return 0;
    }
    


  • Mit Standard-C geht es nicht.

    Du kannst aber Funktionen von deinem System nutzen.
    Unter Windows gibt es kbhit und getch .
    Unter Linux bietet sich ncurses an.

    Es gibt für Windows auch die Improves Console. Schau mal hier in das DOS-Unterforum, 2. Eintrag: https://www.c-plusplus.net/forum/f13



  • Ich habe es nun versucht mit getch zu lösen.
    Jedoch wurde mir vom Compiler angezeigt, dass ich _getch
    verwenden soll.

    Kann mir dies aber nicht erklären, warum ich hier den Unterstrich brauche.

    char zeichen = _getch();
    


  • Das MSDN sagt dazu " This POSIX function is deprecated. Use the ISO C++ conformant _getch instead."

    Ist Quatsch, da getch nie eine POSIX-Funktion war.
    Aber Microsft hat den Namen geändert. Pasiert ab und zu mal mit Funktionen die (noch) nicht im Standard sind.


Anmelden zum Antworten