While Problem



  • Hallo liebe Community,
    Ich beschäftige mich erst seit 2 Wochen mit C, also habt bitte ein bisschen Mitleid 😛

    Wir sollen ein Programm (Kontrollstrukturen) schreiben in dem man 2 Eingaben macht. Diese sollen dann ausgewertet werden.

    Funktioniert auch soweit ganz gut, doch ich habe ein Problem in meiner while-Schleife, sie soll mir die 107 so oft ausgeben, wie der Wert der eingebenen Zahl ist (z.B Input1 = 5 also als Ausgabe 107 107 107 107 107)
    Bei mir wird die 107 nur einfach ausgegeben, egal welche Zahl man eintippt.
    Hier mal die wichtigsten Ausschnitte:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>
    #include <ctype.h>
    #include <assert.h>
    
    int loesung(unsigned int input1, unsigned char input2){
    
    	unsigned char var0;
    
    // Hier liegt irgendwo der Fehler
    
    var0 = input1;           
        while ( 1 ){         
              puts("107");   //wird nur einfach ausgegeben
                             //soll aber so oft ausgegeben werden, wie der Wert der Zahl ist  
    
        if ( --var0 <= 0 );   
              puts("108");   
              break;          
              }
    }      
    
    int main(void) {
    
    	unsigned int input1=0;
    	unsigned char  input2=0;
    	char weiter = 'y';
    
    	do{
    		puts("Please, enter a integer between 1 and 10");
    		if(scanf("%d", &input1)!= 1){
    			perror("Invalid integer input");
    			return EXIT_FAILURE;
    		}
    		while ( getchar() != '\n' );
    
    		puts("Please, enter a letter between a and z");
    		if(scanf("%c", &input2) != 1){
    			perror("Invalid character input.");
    			return EXIT_FAILURE;
    		}
    		printf("input1=%d, input2=%c\n", input1, input2);
    		if( loesung(input1, input2) != 0){
    			perror("error in loesung");
    			return EXIT_FAILURE;
    		}
    		while ( getchar() != '\n' );
    		puts("Continue [y|n]?");
    		scanf("%c", &weiter);
    
    		while ( getchar() != '\n' );
    	}while(weiter == 'y');
    
    	return EXIT_SUCCESS;
    
    }
    

    Ich hoffe irgendjmd versteht mein Problem und kann mir damit helfen...
    Schonmal vielen Dank im voraus!



  • Arbeite mit besserem Einrücken:

    if ( --var0 <= 0 );  
        puts("108");  
        break;
    

    Außerdem solltest du am Anfang auch noch {} klammern setzen, dann fällt auf:

    if ( --var0 <= 0 ); {
        puts("108");  
        break;
    }
    

    Iwas passt mit dem ; nicht, oder was meinst du?

    Hier wird kein Anweisungsblock gesetzt. Da du schon mit ; nach if beendest.
    Außerdem würde selbst durch das gestrichene ; nur eine Anweisung ausgeführt werden.
    => Nach if erstmal nur {} und diese brauchen keine ;

    Edit:

    if (Bedingung) {
    Anweisung1;
    ...
    AnweisungX;
    }
    

    Edit²:

    while(1) { 
      if(Bedingung)
        break;
    ...
    }
    

    Äquivalent zu:

    while(!Bedingung) { 
    ...
    }
    


  • DaRe schrieb:

    Iwas passt mit dem ; nicht, oder was meinst du?

    Hier wird kein Anweisungsblock gesetzt. Da du schon mit ; nach if beendest.
    Außerdem würde selbst durch das gestrichene ; nur eine Anweisung ausgeführt werden.
    => Nach if erstmal nur {} und diese brauchen keine ;

    Vielen Dank, du hattest Recht. Ohne das Semikolon funktionierts
    MfG
    Andy


Anmelden zum Antworten