Zwei mal Output obwohl einmal printf!
-
Hallo, bin quasi Anfänger und arbeite mich durch die Übungen von www.c-howto.de durch. Es geht um ein Spielfeld, wobei "1" die Spielfigur ist. Mit "w,a,s,d" soll diese Figur bewegt werden. Was das Bewegen der Spielfigur betrifft klappt alles wunderbar, nur nach jeder Eingabe des Spielzuges wird das Spielfeld ZWEI mal ausgegeben obwohl in der Schleife nur einmal die entsprechende Funktion aufgerufen wird. Bin ratlos und danke schon mal im Voraus!
Hier ist der Code:
#include <stdio.h> void printField( int *x ); void move( int *x, int *y, int *z, char w ); int main( void ) { setvbuf(stdout, NULL, _IONBF, 0); int field[8][8] = { 0 }; char zug; int posX=0, posY=0; field[posY][posX] = 1; while ( zug != 'x' ) { printField( field ); printf("\nZug [w hoch, s unten, a links, d rechts : "); scanf("%c", &zug); move( field, &posX, &posY, zug ); } return 0; } void printField( int *field ) { int i, j; printf("\n"); for ( i = 0; i < 8; i++ ) { for ( j = 0; j < 8; j++ ) { printf( "%i ", *( field + i * 8 + j ) ); } printf("\n"); } } void move( int *field, int *posX, int *posY, char zug ) { *( field + *posX + *posY * 8 ) = 0; switch ( zug ) { case 'w': (*posY)--; break; case 's': (*posY)++; break; case 'a': (*posX)--; break; case 'd': (*posX)++; break; } if ( *posX < 0 ) *posX = 7; if ( *posX > 7 ) *posX = 0; if ( *posY < 0 ) *posY = 7; if ( *posY > 7 ) *posY = 0; *( field + *posY * 8 + *posX ) = 1; }
-
Das scanf liest dein Zeichen ein und im nächsten Durchlauf noch das '\n' von der Return/Enter-Taste.
Du hast also 2 Zeichen im Puffer.
-
Verstehe, dazu hatte ich vor paar Monaten was gelesen, nach dem scanf nen fflush benutzt, jetzt klappt es wie ich es wollte, danke für die Antwort!
-
Falsch.
In der FAQ http://www.c-plusplus.net/forum/viewtopic.php?t=39349 lesen und anwenden.
-
Thx!