[Novize] While Loop setzt nicht richtig aus :) ?



  • Hey Leute!

    Suche den Fehler in meinen While Schleifen, in welcher die Schleife trotz FALSE der Condition nicht wirklich aussetzt.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void getMovementDir(char);
    void askMovementKey(char);
    int randomNumber();
    
    char UserInput;
    int x = 0;
    int y = 50;
    
    int main()
    {
    	int ItemChance;
    
    	while( y < 50 )
    	{
    		while( x < 50 )
    		{
    			while ( y > -50 )
    			{
    				while ( y > -50 )
    				{
    					askMovementKey(UserInput);
    					printf("Debug Test Coords: %d %d\n",x,y);
    					ItemChance = randomNumber();
    					printf("ItemChance = %d\n",ItemChance);
    
    					if (ItemChance == 0)
    						printf("You obtained a mushroom.\n\n");
    					else
    						printf("You moved. Nothing suspicous around.\n\n");
    				}
    			}
    		}	
    	}
    
    	printf("You reached a unbreakable Wall. Try to move in another direction.\n");
    
    	return 0;
    }
    
    //**************************************************************
    
    int randomNumber()
    {
    	int random;
    	srand(time(NULL));
    	random = rand() % 10;
    
    	return random;
    }
    
    void askMovementKey(char UserInput)
    {
    	printf("In which direction do you want to move now ? ");
    	scanf("%c)",&UserInput);
    	getMovementDir(UserInput);
    	printf("Debug Test Char: %c \n",UserInput);
    
    	return;
    }
    
    void getMovementDir(char movekey)
    {	
    	switch(movekey)
    	{
    		case 'w':
    			y++;
    			break;
    		case 's':
    			y--;
    			break;
    		case 'a':
    			x--;
    			break;
    		case 'd':
    			x++;
    			break;
    		default:
    			printf("Please enter one of the movement keys (w,s,a,d)\n");
    	}
    	return;
    }
    

    [b]Meine Bitte an Euch. Versucht mir, so sehr es auch kitzelt, nur mein Problem zu erklären - da ich die restlichen Fehler die vll. noch auftreten erstmal auf eigene Faust lösen möchte 🙂

    Problem:

    Ich möchte bei Eingabe von "w" das y + 1 bekommt. Das soll solange passieren wie y < 50 ist z.b. Ändere ich die global var y = 50 so wird

    printf("You reached a unbreakable Wall. Try to move in another direction.\n");
    

    direkt ausgeführt.
    Lasse ich jedoch y durch die UserInput erhöhen wie in meiner Funktion getMovementDir() geht das Ganze über y = 50 hinaus aber es wird die obige printf() nicht ausgeworfen bzw. der Loop nicht gestoppt an der Stelle.

    Bitte berücktsichtigt das ich erst seit einem Monat über C lerne und bis jetzt nur Theorie hatte 🙂
    Das Projekt hier ist mein erster Versuch des Learning by Coding 😃

    gruß Charlie



  • Falke88 schrieb:

    while ( y > -50 )
    			{
    				while ( y > -50 )
    				{
    

    Sieht sehr sinnfrei aus.
    Du hast die Schleifen-Hierarchie nicht verstanden, zuerst wird die innerste Schleife komplett abgearbeiten, d.h. die äußeren Bedingungen bleiben unberücksichtigt.
    Was du wohl meinst ist

    while( y > -50 && y < +50 && x > -50 && x < +50 )
    ...
    

    d.h. alle Bedingungen werden bei jedem Schleifendurchlauf geprüft und nicht wie bisher erst nach Beendigung einer Schleifenebene.



  • solange y größer als -50 ist. kommst du aus der inneren whhile-Schleife nicht raus. Und 50 ist größer als -50.

    Du brauchst nicht vier Schleifen sondern nur ein mit vier Bedingungen.



  • Haha

    Ok die Schleifenhierarchie habe ich wirklich so nicht gesehen. Aber das mit dem && ist mir heute morgen auch eingefallen 😉

    Heisst es also wenn While 4 nicht zutrifft prüfe While 3 usw. bis zur While 1 Schleife?

    Ich bedanke mich für die Hinweise !

    gruß Charlie



  • Falke88 schrieb:

    Heisst es also wenn While 4 nicht zutrifft prüfe While 3 usw. bis zur While 1 Schleife?

    nein. eine schleife reicht völlig. das wurde schon geschrieben.
    mit 4 schleifen zu arbeiten ist blödsinn.


Anmelden zum Antworten