Unendlich viele Zahlen eingeben und Mittelwer ausgeben



  • #include<stdio.h>
    #include<conio.h>
    
    void main()
    {
    	float eingabe, anzahl=0, mittelwert;
    	FILE*pf;
    	pf=fopen("D:\\test.txt","w");
    
    	printf("\n\t\tWilkommen\n");
    	printf("Mit diesem Programm berechnen Sie den Mittelwert!!\n");
    	do
    	{
    	printf("\nBitte geben beliebig viele Werte ein, ende der eingabe mit 0!!\n");
    	scanf("%d",&eingabe);
    	fprintf(pf,"%d",eingabe);
    	anzahl++;
    	}while(eingabe!=0);
    	fclose(pf);
    
    	pf=fopen("D:\\test.txt","r");
    	int x,r;
    
    	do
    	{
    	r=fscanf(pf,"%d",&x);
    	}while(r!=EOF);
    
    	mittelwert=x/anzahl;
    	printf("%d\n",x);
    	printf("%d",mittelwert);
    	fclose(pf);
    
    }
    

    So, dass ist zwar der Anfang. Aber irgendwie kommt der falsche Mittelwert zustande.
    Und ich habe absolut keinen schimmer wieso.
    Deswegen wende ich mich mal an euch und danke euch schon im Voraus!



  • Erst mal hast du eingabe als float declariert dann liest du aber mit scanf ein int.
    Dann musst du naürlich beim Einlesen aus der Datei die gelesenen Werte aufsummieren und diese Summe dann durch die Anzahl der gelesenen Werte dividieren.
    Wies jetzt ist dividierst du nur den letzten gelesenen Wert durch die Anzahl der gelesenen Werte.
    Kurt



  • danke für die schnelle antwort.
    aber wie summiere ich die werte die in der datei gespeichert sind?



  • Vielleicht so

    int sum = 0;
        do {
           r=fscanf(pf,"%d",&x);
           if ( 1 == r )
              sum += x;
        }while(r!=EOF);
    

    Kurt



  • funzt nicht, es kommt als ergebnis weiterhin 0.000 raus



  • Hast du eingabe schon als int declariert ?.
    Ausserdem brauchst du bei der ausgabe in die Datei ein leerzeichen zwischen den Zahlen. etwa so.

    do
        {
           printf("\nBitte geben beliebig viele Werte ein, ende der eingabe mit 0!!\n");
           scanf("%d",&eingabe);
           fprintf(pf,"%d ",eingabe);
           anzahl++;
        }while(eingabe!=0);
    

    Kurt



  • kein verbesserung, es wird noch immer 0 als mittelwert ausgegeben



  • Bei mir funktioniert's so halbwegs. ( die abschliessende 0 wird mitgezählt ).
    Kurt



  • #include<stdio.h>
    #include<conio.h>
    
    void main()
    {
    	int eingabe, anzahl=0, mittelwert, summe=0;
    	FILE*pf;
    	pf=fopen("D:\\test.txt","w");
    
    	printf("\n\t\tWilkommen\n");
    	printf("Mit diesem Programm berechnen Sie den Mittelwert!!\n");
        do
        {
           printf("\nBitte geben beliebig viele Werte ein, ende der eingabe mit 0!!\n");
           scanf("%d",&eingabe);
           fprintf(pf,"%d ",eingabe);
           anzahl++;
        }while(eingabe!=0);
    	fclose(pf);
    
    	pf=fopen("D:\\test.txt","r");
    	int x,r;
    
    	do
    	{
    	r=fscanf(pf,"%d",&x);
    	 if (1 == r)
              summe+=x; 
    	}while(r!=EOF);
    
    	mittelwert=x/anzahl;
    	printf("%d\n",x);
    	printf("%d",mittelwert);
    	fclose(pf);
    
    }
    

    vielleicht hab ich was falsch verstanden und schlecht übertragen?



  • mittelwert=summe/anzahl;
    

    edit: typo


Anmelden zum Antworten