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]

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...