Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit einer while-schleife

Empfohlene Antworten

Veröffentlicht

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

Ich habe grade keine Ahnung und keine Lust mich reinzulesen, aber ich habe einen Tipp:

Sprechende Variablennamen helfen Helfern dir zu helfen ;)

lG

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]

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.