Eingabe von Array Werten mit return beenden



  • Hallo alle zusammen. In der Uni sollen wir ein kleines Programm schreiben, mit dem wir:
    1. beliebig viele aber maximal 10 Dezimalzahlen in ein Array eingeben (Die Eingabe soll durch die Taste Return beendet werden)
    2. Den Mittelwert der eingegebenen Werte berechnen.

    Das Programm funktioniert leider nicht ganz so wie es soll, denn als Ergebnis kommt nach drücken der Entertaste nan heraus.

    int main(void) {
    //Deklaration
    	int anzahl = 10;
    	float speicher[anzahl];
    	float summe = 0;
    	int zaehler = 0;
    	int i;
    
    //Elemente mit 0 initialisieren
    	for (i = 0; i < anzahl; i++) {
    		speicher[i] = 0;
    	}
    
    	printf("Bitte Zahlen eingeben und jeweils mit Enter bestaetigen:\n");
    //Werte in Schleife eingeben
    	int c;
    	for (i = 0; i < anzahl /*&& (c = getchar()) != '\n'*/; i++) {
    		if((c = getchar()) != '\n'){
    			break;
    		}
    		else {
    			scanf("%f", &speicher[i]);
    			zaehler = zaehler + 1;
    		}
    	}
    
    //Werte summieren
    	for (int i = 0; i < zaehler; i++) {
    		printf("%f\n", speicher[i]);
    		summe = summe + speicher[i];
    	}
    
    //Mittelwert ausgeben
    	printf("Der Mittelwert ist: %f", summe / zaehler);
    	return 0;
    }
    

    Über eine Antwort würde ich mich sehr freuen. 🙂





  • Dankeschön für die Antwort. Mit dem Return der Funktion scanf() zu arbeiten habe ich auch schon einmal probiert. Allerdings funktioniert auch das nicht bei mir. Die Schleife bricht bei mir nur ab, wenn ich mit einem Buchstabe beende, nicht jedoch mit Enter.

    Bitte Zahlen eingeben und jeweils mit Enter bestaetigen:
    1 2 3 4
    u
    1.000000
    2.000000
    3.000000
    4.000000
    Der Mittelwert ist: 2.500000
    


  • #include <stdio.h>
    
    #define MAX_COUNT (10)
    
    int peekchar(void)
    {
        int c;
    
        c = getchar();
        if(c != EOF) ungetc(c, stdin);      
    
        return c;
    }
    
    int main(void)
    {
        int i,zaehler=0;
        float speicher[MAX_COUNT],summe=0.0f;  
    
        printf("Bitte Zahlen eingeben und jeweils mit Enter bestaetigen:\n");
    
        for(i=0;i<MAX_COUNT;i++)
        {
            if(peekchar()=='\n' || !scanf("%f",&speicher[i]))
                break;
            getchar();
        }
    
        zaehler=i;
    
        for(i=0;i<zaehler;i++)
        {
            printf("%f\n",speicher[i]);
            summe+=speicher[i];
        }
    
        if(zaehler!=0)
        {
            printf("Der Mittelwert ist: %f\n",summe/zaehler);
        }
    
        return 0;
    }
    

    Eher ungetestet und schnell gehackt, weil ich gleich los muss, aber zumindest hast du den -nan-Fehler weg und das Programm bricht bei einer leeren Zeilen (zumindest bei mir) ordentlich ab.



  • Hey super, wenn man das getchar(); unterm break weglässt, ist auch das Leerzeichen weg. So funktioniert das jetzt super. Dankeschön für die schnelle Hilfe.

    #include <stdio.h>
    
    #define MAX_COUNT (10)
    
    int peekchar(void)
    {
        int c;
    
        c = getchar();
        if(c != EOF) ungetc(c, stdin);
    
        return c;
    }
    
    int main(void)
    {
        int i,zaehler=0;
        float speicher[MAX_COUNT],summe=0.0f;
    
        printf("Bitte Zahlen eingeben und jeweils mit Enter bestaetigen:\n");
    
        for(i=0;i<MAX_COUNT;i++)
        {
            if(peekchar()=='\n' || !scanf("%f",&speicher[i]))
                break;
           // getchar();
        }
    
        zaehler=i;
    
        for(i=0;i<zaehler;i++)
        {
            printf("%f\n",speicher[i]);
            summe+=speicher[i];
        }
    
        if(zaehler!=0)
        {
            printf("Der Mittelwert ist: %f\n",summe/zaehler);
        }
    
        return 0;
    }
    

Anmelden zum Antworten