Problem beim einlesen unbekannter anzahl an zahlen



  • Guten Tag,

    habe ein Problem mit der folgenden Aufgabe:

    Schreiben sie ein Programm das eine unbekannte Anzahl an double Zahlen einliest, jedoch maximal 10. Da sie eine beliebige Anzahl an Zahlen einlesen sollen, informieren sie sich bitte über die scanf anweisung wie man das problem lösen kann. Es ist auch möglich auf eine Dateiendekennung bei einer Terminaleingabe abzufragen.

    Der letzte Teil bereitet mir Probleme. Hab das Programm bis jetzt so gelöst das es bei eingabe einer 0 abbricht, hab aber keine ahnung wie ich das mit der Dateiendekennung lösen kann.

    #include <stdio.h>
    int main() {
    int i=0,j;
    double zahlen[10];
    for(i=0; i<10; i++){
    printf("Zum Eingabeende 0 eingeben \n");
    printf("\nZahl Nr.%d: ", i + 1);
    scanf("%lf",&zahlen[i]);
    if(i>10){printf("Maximal 10 Zahlen");}
    if(zahlen[i]==0) {break;}}
    
    printf("Anzahl der eingelesenen Werte: %i \n",i);
    j=i;
    printf("Ausgabe der eingelesenenZahlenfolge: ");
    for(i=0;i<j;i++){printf("%.2lf ",zahlen[i]);}
    
    return 0;
    }
    

    Bin über jede hilfe dankbar.

    MFG

    Daze


  • Mod

    Benutze die Rückgabewerte!

    #include <stdio.h>
    int main() {
      int i = -1, j, errorcode = 1;
      double zahlen[10];
    
      while(errorcode == 1)
        {
          ++i;
          if (i == 10)
            {
              puts("Maximal 10 Zahlen\n");
              break;
            }
          printf("Zahl Nr.%d: ", i + 1);
          errorcode = scanf("%lf", &zahlen[i]);
        }
    
      printf("Anzahl der eingelesenen Werte: %i \n",i);
      puts("Ausgabe der eingelesenen Zahlenfolge: ");
      for(j = 0; j < i; ++j)
        printf("%.2f ",zahlen[j]);
      putchar('\n');
      return 0;
    }
    

    Beachte auch andere subtile Unterschiede, wie zum Beispiel die Benutzung der richtigen Formatspezifizierer bei der Ausgabe von double-Werten. Am besten vergleichst du mal Zeile für Zeile all die kleinen Unterschiede und fragst dich, was und warum ich die Sachen anders gemacht habe.



  • Dein Lehrer meint mit Dateiendekennung wohl das standardkonforme EOF.
    Falls ja, kann man das für den einfachsten Anwendungsfall, dass EOF (^Z Windows,^D Unix) gleich als erstes Zeichen bei der Eingabeaktion eingegeben wird, über scanf machen.

    #include <stdio.h>
    int main() {
    int i,j;
    double zahlen[10];
    printf("Zum Eingabeende EOF eingeben, immer mit <ENTER> abschliessen\n");
    for(i=0; i<10; i++)
    {
    printf("\nZahl Nr.%d: ", i + 1);
    if( EOF==scanf("%lf",&zahlen[i]) )
      break; /* hat der Anwender ein führendes EOF eingegeben, dann hier raus */
    
    }
    
    printf("Anzahl der eingelesenen Werte: %i \n",i);
    printf("Ausgabe der eingelesenenZahlenfolge: ");
    for(j=0;j<i;j++){printf("%.2f ",zahlen[j]);}
    
    return 0;
    }
    


  • vielen dank. habt mir beide sehr geholfen.



  • Hoy,

    hab die gleiche Aufgabe!

    Nur wenn ich dann eof eingebe bricht zwar das Programm ab, aber bei "Anzahl der eingelesen Werte" steht trotzdem 10, obwohl ich nur 3 eingelesen habe !

    Wie kann ich das beheben?

    Mfg


  • Mod

    Zeig Code.



  • Und welche Tasten drückst du?



  • #include <stdio.h>
    
    int main() {
    
            int i,j ;
            double array[10];
    
            printf("\nZum Eingabeende EOF eingeben und mit <Enter> bestätigen");
    
            for ( i = 0; i < 10; i++) {
                    printf("\nBitte %d -tes Element eingegeben: ", i+1);
                    if (EOF == scanf("%lf", &array[i]))
                    break;
            }
    
            printf("\nAnzahl der eingelesen Werte: %i ", i);
    
            printf("\nAusgabe der eingegebenen Werte: ");
            for ( j = 0; j < i; j++){
                    printf("%0.2lf ", array[j]);
            }
    
            printf("\nAusgabe der positiven Zahlen:  ");
                    for ( j  = 0; j < i; j++){
                            if(array[j] > 0)
                            printf("%0.2lf ", array[j]);
                    }
    
            printf("\nAusgabe der negativen Zahlen: ");
                    for (j = 0; j < i; j++) {
                            if (array[j] < 0)
                            printf("%0.2lf ", array[j]);
                    }
    return 0;
    }
    

    Hab das Problem aber gelöst 🙂

    Hab die ganze Zeit EOF eingetippt und mit Enter bestätigt aber dann klappt es nicht.

    Man muss mit STR - D beenden dann funktioniert es einwandfrei 😉



  • Wutz schrieb:

    Dein Lehrer meint mit Dateiendekennung wohl das standardkonforme EOF.
    Falls ja, kann man das für den einfachsten Anwendungsfall, dass EOF (^Z Windows,^D Unix) gleich als erstes Zeichen bei der Eingabeaktion eingegeben wird, über scanf machen.

    ^D bedeutet Strg-D


Anmelden zum Antworten