Hallo allerseits! Folgendes kleine Programm in C soll eine beliebige Reihe von Eingaben != 0 rekursiv addieren. Für gültige Eingaben klappt das auch, aber bei einer ungültigen Eingabe sollte eigentlich nur eine Fehlermeldung auftreten und die nächste Zahl eingegeben werden. In der Praxis kommt es dann aber zu einer Endlosschleife und ich frage mich: Warum? Bei jedem neuen Aufruf der Funktion add() werden doch die Variablen (summand, k) neu initialisiert, warum wird also ohne Eingabe weiter ge-errort???
#include <stdio.h>
double add(void);
int main(void) { printf("Bitte geben Sie, durch <ENTER> getrennt, beliebig viele Zahlen != 0 ein.\nMit 0 beenden Sie die Eingabe!\n"); printf("Die Summe beträgt: %f", add() ); return 0; }
Ich gehe mal davon aus, dass eine dermassen blödsinnige Aufgabe aus der Schule stammen muss. Davon abgesehn, dass ich soetwas NIEMALS rekursiv lösen würde, sollte es wie folgt gehen. Dein Problem ist, dass die eine invalide Rückgabe von scanf die Rekusrion erneut auslöst.
Ungetesteter Code:
double add(void);
int main(void) { printf("Bitte geben Sie, durch <ENTER> getrennt, beliebig viele Zahlen != 0 ein.\nMit 0 beenden Sie die Eingabe!\n"); double ergebnis = add(); printf("Die Summe beträgt: %f", ergebnis); return 0; }
double add(void) { double summand; int k; do { printf("Eingabe > "); k = scanf("%lf", &summand); if( k != 1 ) printf("Ungültige Eingabe!\n"); }while( k != 1 );