EOF (End of File)

Von: , Frage gestellt am Mo, 10. Mär 2008

hallooo,
das Programm soll später mittelwert, abweichung etc ausgeben.
mein problem ist, wenn ich die eingabe mit ctrl-d abbreche, wird auf die anzahl der Zahlen trotzdem noch einer drauf gezählt.
ist meine if-abfrage falsch??

#include <stdio.h>
int main()
{
float zahlen[6]={0,0,0,0,0,0}, summe=0, mittelwert=0, abweichung=0;
int i=0, j=0,anzahl=0, ende=0;
printf('\nBitte geben Sie die Zahlen mit 2 Nachkommastellen an!');
while (ende!=EOF && i<6)
{
i++;
printf('\nZahl %i: ', i);
ende=scanf('%f', &zahlen[j]);
if(ende!=EOF)
{
anzahl++;
summe+=zahlen[j];
j++;
}
}
printf('\nAnzahl der eingelesenen Werte: %i', i);
printf('\nAusgabe der eingelesenen Zahlenfolge\n');
for(i=0;i<anzahl;i++)
{
printf('%6.2f  ', zahlen[i]);
}
mittelwert=summe/anzahl;
printf('\nDer Mittelwert betraegt: %f', mittelwert);
printf('\n\n  Wert          Abweichung\n==========================');
for(i=0;i<anzahl;i++)
{
abweichung=zahlen[i]-mittelwert;
printf('\n  %f          %f', zahlen[i], abweichung);
}
}


[MOD]: <pre>-Tags hinzugefügt, in Zukunft bitte selbst machen.

2 Antworten zu dieser Frage

  1. Antwort von nach 15 Stunden 0 hilfreich
    Re: EOF (End of File)

    hallooo,
    Hi,
    also was ich nicht ganz verstehe, woher denn nun dieses EOF kommt. Normalerweise wird dies doch genutzt, wenn man mit FILE* aus einer Datei liest, um eben das Ende selbiger anzuzeigen. Da du allem Anschein nach aber eben nicht aus einer Datei liest, ist diese Abfrage doch wahrscheinlich ohne Effekt oder? Falls ich da jetzt falsch liege könntest du mich ja aufklären, denn eigentlich habe ich mit C nix zu tun, sondern viel mehr mit C++.

    Hruß UsYer

    [MOD]: sinnloses full-quote gelöscht

  2. Antwort von nach 21 Stunden 0 hilfreich
    Re: EOF (End of File)

    Hallo, das Programm soll später mittelwert, abweichung etc ausgeben.
    mein problem ist, wenn ich die eingabe mit ctrl-d abbreche,
    wird auf die anzahl der Zahlen trotzdem noch einer drauf
    gezählt. ist meine if-abfrage falsch??
    Ja, Du mußt genau schauen, wann Du die Schleife anhalten mußt
    und wann Du den Zähler hochzählen mußt.

    #include <stdio.h>
    int main()
    {
    float zahlen[6]={0,0,0,0,0,0}, summe=0, mittelwert=0,
    ...
    

    Ich hab mal Deinen Quelltext minimal verändert - so, wie ich denke,
    daß es richtig gehen müßte:

    #include <stdio.h>
    int main()
    {
    double zahlen[]={ 0, 0, 0, 0, 0, 0 }, summe=0, r_mean=0;
    int i, ende=0, anzahl=0, N=sizeof(zahlen)/sizeof(zahlen[0]);
    char puffer[25];
    printf("\nBitte geben Sie die %d Zahlen mit je 2 Nachkommastellen an!\n", N);
    setbuf(stdout, NULL);
    while( ! ende && anzahl < N ) {
    printf("|n:%2d, sum:%-9g, mean:%-9g| \tZahl %i:", anzahl, summe, r_mean, anzahl+1);
    fgets(puffer, sizeof(puffer), stdin);
    if(sscanf(puffer, "%lf", zahlen+anzahl) == 1) {
    summe += zahlen[anzahl];
    r_mean = summe / ++anzahl;
    }
    else
    ++ende;
    }
    printf("Anzahl der eingelesenen Werte: %i\n", anzahl);
    printf("Ausgabe der eingelesenen Zahlenfolge\n");
    for(i=0; i<anzahl; i++) 
    printf("%.2f%s", zahlen[i], i==anzahl-1 ? "\n" : "\t");
    printf("Der Mittelwert betraegt: %g\n", anzahl ? summe/anzahl : 0);
    printf("%16s|%16s\n\t==========================\n", "Wert", "Abweichung");
    for(i=0; i<anzahl; i++)  
    printf("%16g|%16g\n", zahlen[i], zahlen[i] - summe/anzahl);
    return 0;
    }
    


    Grüße

    CMБ

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!