Zum Inhalt springen

Probleme mit einer while-schleife


Empfohlene Beiträge

Geschrieben

Hallo hallo,

ich möchte ein Programm schreiben, dass ein Spielfeld printet, dann soll man sagen in welche Richtung man will und dann soll der einen dahinbewegen bis man an einem ziel ist. Das ganze Ding sieht so aus:


#include <stdio.h>


// Aktuelle Position der Spielfigur

short spielfigur_x = 1;

short spielfigur_y = 4;


// Definition des Spielfelds

short spielfeld[10][10] = {

{1,1,1,1,1,1,1,1,1,1},

{1,0,0,1,0,0,0,1,0,1},

{1,1,0,0,0,1,0,1,0,1},

{1,0,0,0,1,1,0,0,0,1},

{1,1,1,0,1,1,1,1,1,1},

{1,1,1,0,1,0,0,0,0,1},

{1,0,0,0,1,1,0,1,0,1},

{1,0,1,0,0,0,0,1,0,1},

{1,0,0,0,1,1,1,1,2,1},

{1,1,1,1,1,1,1,1,1,1}

};


int m,n,b,x,y,e;

char eingabe;


void ausgabe() 

{

        for(m=0;m<10;m++)

        {

            for(n=0;n<10;n++)

            {    

                b=spielfeld[m][n];

                if(m==y && n==x)

                    printf("X");

                else

                    switch(

                    {

                        case 0:

                        {

                            printf(" ");

                            break;

                        }

                        case 1:

                        {

                            printf("#");

                            break;

                        }

                        case 2:

                        {

                            printf("O");

                            break;

                        }

                    }

            }

                printf("\n");

        }

}



int tastatur() {

printf("In welche Richtung moechten sie gehen?");

scanf("%c",&eingabe);

switch(eingabe)

{

    case 'w':

    {

        y=y-1;

        break;

    }

    case 's':

    {

        y=y+1;

        break;

    }

    case 'a':

    {

        x=x-1;

        break;

    }

    case 'd':

    {

        x=x+1;


        break;

    }

    case 'q':

    {

        printf("3");

        x=8;

        y=8;

        return(0);

        break;

    }

}


switch(spielfeld[y][x])

{    

    case 0:

    {

        printf("1\n");

        break;

    }

    case 1:

    {

        printf("0\n");

        switch(eingabe)

        {

            case'w':

            {

                y=y+1;

                break;

            }

            case's':

            {

                y=y-1;

                break;

            }

            case'a':

            {

                x=x+1;

                break;

            }

            case'd':

            {

                x=x-1;

                break;

            }

        }

        break;

    }

}

}

int main(int argc, char **argv ) {

    x=1;

    y=4;

    while((x!=8) || (y!=8))

    {

        ausgabe();

        tastatur();    

        printf("\nx=%d y=%d",x,y);

        printf("\n\n\n\n\n");

    }

}

[/code]

Das Problem ist nun folgendes: Er printet das Feld, macht die Abfrage, dann gibt man was ein und er ändert auch die Position usw richtig. Das einzige Problem ist, dass er die while-Schleife in der main-Funktion nochmal durchgeht, aber keine Abfrage macht und dann nochmal durchgeht und dann die Abfrage funktioniert. Er macht also einen Durchlauf zu viel. ich hoffe ihr versteht, was ich meine.

Vielen Dank schonmal

Geschrieben
Das einzige Problem ist, dass er die while-Schleife in der main-Funktion nochmal durchgeht, aber keine Abfrage macht und dann nochmal durchgeht und dann die Abfrage funktioniert. Er macht also einen Durchlauf zu viel.
Das ist ein grundsätzliches Problem bei der Verwendung von scanf mit %c. Beim nächsten Durchlauf ist nämlich noch das Zeichen für die Eingabetaste im Puffer, und das liefert scanf dir dann.

Du solltest nach der Eingabe alle Zeichen bis zum Zeilenwechsel auslesen und ignorieren, also statt scanf:

eingabe = getchar();      // Ein Zeichen einlesen
while(getchar() != '\n'); // Nachfolgende Zeichen bis inklusive Zeilenwechsel ignorieren[/code]

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...