Petla wykonujaca sie o raz za duzo
Ostatnio zmodyfikowano 2013-11-11 09:32
Ozonkor Temat założony przez niniejszego użytkownika |
Petla wykonujaca sie o raz za duzo » 2013-11-11 00:53:35 Witam. Chcialem sobie napisac jakis prosty program symulujacy ruchy gracza w nieskonczonej grze, jednak po wcisnisnieciu klawisza przechodzi jedna pusta petla bez mozliwosci wpisania klawisza, niestety nie mam pojecia dlaczego. Czy ma ktos jakis pomysl dlaczego tak sie dzieje? Jezyk : C Kompilator : Dev_cpp 4.9.9.2 #include <stdio.h> #include <stdlib.h>
int main( int argc, char * argv[] ) { char direction; int x = 0, y = 0; while( 1 ) { puts( "Witamy w grze w zycie!" ); puts( "-------------------------------------------------------" ); printf( "Obecne koordynaty: %i, %i\n", x, y ); puts( "-------------------------------------------------------" ); puts( "Gdzie chcesz isc?" ); puts( "Press q if North-West\tPress w if North\tPress e if North-East" ); puts( "Press a if West \tPress s if Stay \tPress d if East" ); puts( "Press z if South-West\tPress x if South\tPress c if South-West" ); printf( "Wprowadz zmienna: " ); scanf( "%c", & direction ); printf( "Wpisales %c", direction ); puts( "" ); switch( direction ) { case 'q': x--; y++; break; case 'w': x; y++; break; case 'e': x++; y++; break; case 'a': x--; y; break; case 's': x; y; break; case 'd': x++; y; break; case 'z': x--; y--; break; case 'x': x; y--; break; case 'c': x++, y--; break; default: puts( "Niedzwolony ruch" ); break; } } system( "PAUSE" ); return 0; }
Nie wiem czy nie robie cos zle w funkcji scanf(), poniewaz w ponizszym kodzie np wogole nie moge wpisac znaku: int req; char sreq;
while( 1 ) { printf( "Wprowadz liczbe: " ); scanf( "%i", & req ); printf( "W zmiennej req jest : %i\n", req ); printf( "Podaj jeszcze jakis znak : " ); scanf( "%c", & sreq ); printf( "W zmiennej char_req jest : %c\n", sreq ); }
Probowalem zarowno z %c i %ch. Pozdrawiam |
|
Matej |
» 2013-11-11 08:57:16 A jak zamierzasz wyjść z pętli żeby zakończyć program?
%c zamień na %s. Dodałbym jeszcze char sreq [1] zamiast char sreq.
|
|
Monika90 |
» 2013-11-11 09:14:11 Jak wpiszesz liczbę i naciśniesz enter to następne wywołanie scanf( "%c", & sreq ); wczyta znak przejścia do nowej linii. Jak chcesz żeby scanf pomijało białe znaki to dodaj spację przed %c: To rozwiąże również twój pierwszy problem. %c zamień na %s. Dodałbym jeszcze char sreq [1] zamiast char sreq.
|
Raczej głupi pomysł. |
|
Ozonkor Temat założony przez niniejszego użytkownika |
» 2013-11-11 09:32:37 Stokrotne dzieki Moniko, poniewaz niby taka drobnostka,a naprawde duzo czasu nad tym spedzilem. @Matej - robienie tablicy jednoargumentowej uwazam za trpche dziwne, ale tez dzieki za rade ;) |
|
« 1 » |