Endlosschleife gebaut -- HILFE



  • Habe hier eine Funktion die einen Intergerwert einlesen soll mit Fehlerbehandlung. Wenn ich die funktion aufrufe und z.B. ein "a" eingebe hört er nicht wieder auf die Fehlermeldung hinter
    if(n != 1) auszugeben bzw. die Funktion komplett zu durchlaufen, wenn ich einen richtigen wert eingebe, geht er nicht aus der Funktion raus 😞
    Ich hoffe mir kann hier jemand helfen

    /**********************************************************************************
    *Name: readint                                                                    *
    *																				  *
    *Zweck: Einlesen eines Interger-Werts mit Fehlerbehandlung	                      *
    *					                                                              *
    *Prototyp: int readint(const char msg[], int lower, int upper)                    *
    *					                                                              *
    *Parameter:	                                                                      *
    *																	              *
    *msg[] (E) Zeichenkettenkonstante												  * 
    *lower (E) untere Grenze														  *
    *upper (E) obere Grenze															  *
    *		                                                                          *
    *Funktionswert: zulaessige Eingabe im Menü										  *
    **********************************************************************************/
    
    int readint(const char msg[], int lower, int upper)
    {
    
    	int flag, n, read;
    
    	read = TRUE;
    	while(read)
    	{
    		printf("\n%s",msg);
    		n = scanf("%i", &flag);
    
    		if(n != 1)
    		{
    			printf("\nUngueltige Eingabe! Bitte einen Zahlenwert zwischen %i und %i eingeben!", lower, upper);
    
    		}
    		else if(flag < lower)
    		{
    			printf("\nBitte Wert zwischen %i und %i eingeben", lower, upper);
    
    		}
    		else if(flag > upper)
    		{
    			printf("\nBitte Wert zwischen %i und %i eingeben", lower, upper);
    
    		}
    		else
    			read = TRUE;
    
    	}
    	return flag;
    }
    


  • mach das nach scanf():

    while (getchar() != '\n');

    dein else:read=true zweig ist sinnlos. benutz stattdessen ein "break;". dann kannst du dir auch die read variable sparen und stattdessen ein while (1) benutzen.

    deine zwei nicht-im-intervall elseifs kannst du zusammenfassen, weil du in den fehlermeldungen ja nicht unterscheidest.

    ein paar weniger leerzeilen wuerden deinem quelltext gut tun.

    wenn dir keiner vorschreibt, diesen dummen funktionskopfkommentarblock zu benutzen, kill ihn. die funktion ist selbsterklaerend, schon allein von name und parameterliste her.



  • wird mir vorgeschrieben, vielen dank, ich werde es jetzt mal ausprobieren


Anmelden zum Antworten