Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Petla wykonujaca sie o raz za duzo

Ostatnio zmodyfikowano 2013-11-11 09:32
Autor Wiadomość
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
C/C++
#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:
C/C++
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
P-95976
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.
P-95984
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:
C/C++
scanf( " %c", & sreq );
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ł.
P-95985
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 ;)
P-95986
« 1 »
  Strona 1 z 1