Array-Problem! Hilfe!



  • Nick Unbekannt schrieb:

    😕

    Indem du nur zwei Eingaben abfragst?

    ungetestet:

    #include <stdio.h>
    
    /**
     * die Makros sollen dich erstmal nicht interessieren
     */
    #define MIN(A,B)		((A) < (B) ? (A) : (B))
    #define ELEMENTE(A)		(sizeof(A)/sizeof((A)[0]))
    
    int main(void)
    {
        int i;
        float zahl[6]; /* ELEMENTE(zahl) liefert 6, geht nicht bei Zeigern */
        
        for (i = 0; i < MIN(2, ELEMENTE(zahl)); i++)
        {
    	scanf("%f", &zahl[i]);
        }
    
        for (i = 0; i < MIN(2, ELEMENTE(zahl)); i++)
        {
    	printf("%f\n", zahl[i]);
        }
        
        return 0;
    }
    

    Das Problem ist - es können 2, 3, 4 oder 5 Elemente sein! muss ich jetzt für jede Einzahl eine Bedienung schreiben?



  • zekin schrieb:

    Das Problem ist - es können 2, 3, 4 oder 5 Elemente sein!

    Wie soll dein Programm das denn erkennen? Sprich: Wie schließt der Benutzer die Eingabe ab?



  • zekin schrieb:

    Das Problem ist - es können 2, 3, 4 oder 5 Elemente sein! muss ich jetzt für jede Einzahl eine Bedienung schreiben?

    Weißt du vorher wieviel Elemente es sind?
    Dann kannst du ja die Anzahl in der Schleife mit angeben.

    Ansonsten gibt scanf auch die Anzahl der gelesenen Werte zurück.
    Wenn dann keine Zahl mehr eingegeben wird gibt scanf 0 zurück, sonst 1 (in diesem Beispiel).



  • Belli schrieb:

    Genau so, wie Du sie beenden würdest, nachdem Du 6 Zahlen eingegeben hast - nur eben schon nach zweien ...

    Das geht automatisch nach der 6-ten Eingabe



  • Ich soll eine unbekannte Anzahl von float-Elementen einlesen, aber nicht mehr als 6.

    #include <stdio.h>
    int main() {

    float zahl[6];
    float wert;
    int i;
    for(i=0; i<6; i++)
    {
    printf("Bitte eine Zahl eingeben\n");
    scanf("%f", &zahl[i]);

    if (i > 6)
    {
    printf("Zu viele Zahlen eingegeben!\n");
    return 1;
    }
    }
    wert = (zahl[0] + zahl[1]+ zahl[2]+ zahl[3]+ zahl[4]+ zahl[5])/i;
    printf("Anzahl der eingelesenen Werte: %i\n", i);
    printf("Eingelesene Zahlenfolge %f.2, %f.2, %f.2, %f.2, %f.2, %f.2 \n", zahl[0], zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]);
    printf(" Der Mittelwert ist: %f.2 \n", wert);
    return 0;



  • zekin schrieb:

    Ich soll eine unbekannte Anzahl von float-Elementen einlesen, aber nicht mehr als 6.

    Wie soll der Benutzer dem Programm signalisieren, dass er mit der Eingabe fertig ist?

    Das ist eine grundlegende Frage der Bedienung, die du beantworten musst.

    Du könntest festlegen, dass der Benutzer zuerst die Anzahl der Zahlen eingeben muss. Oder das er die Eingabe durch einen bestimmten Wert oder eine Leereingabe abschließt oder was weiß ich.

    Aber irgendwie muss das Programm erkennen können, ob der Benutzer fertig ist, oder ob noch mehr Zahlen kommen.



  • zekin schrieb:

    Belli schrieb:

    Genau so, wie Du sie beenden würdest, nachdem Du 6 Zahlen eingegeben hast - nur eben schon nach zweien ...

    Das geht automatisch nach der 6-ten Eingabe

    automatisch passiert in C gar nichts. Du musst schon in der Abbruchbedingung dafür sorgen, dass es 6 oder 5 oder 102978 Elemente gelesen werden. Und was deinem Code anbetrifft:

    1. Verwende CPP Tags! 😡

    for(i=0; i<6; i++) 
    { 
      printf("Bitte eine Zahl eingeben\n"); 
      scanf("%f", &zahl[i]);
    

    da hast du doch "i < 6". Willst du nur 2, dann mach doch "i < 2". Ansonsten musst du dich genauer ausdrücken, sonst verstehen wir dich nicht.



  • Versuch doch mal:

    if (scanf("%f", &zahl[i]) == 0) break;
    

    (In der Zeile wo scanf steht)



  • da hast du doch "i < 6". Willst du nur 2, dann mach doch "i < 2". Ansonsten musst du dich genauer ausdrücken, sonst verstehen wir dich nicht.[/quote]

    Das ist genau das Problem: eine unbekannte Menge der Elemente muss gespeichert werden! Aber nicht mehr als 6!



  • Dann mußt Du Dir erst Mal hierüber Gedanken machen:

    MFK schrieb:

    Wie soll der Benutzer dem Programm signalisieren, dass er mit der Eingabe fertig ist?

    Das ist eine grundlegende Frage der Bedienung, die du beantworten musst.



  • #include <stdio.h>
    int main() {
    
    float zahl[6]={0};
    float wert;
    int i;
    for(i=0; i<6; i++)
    {
    printf("Bitte eine Zahl eingeben oder <ENTER> für Ende\n");
    if( !scanf("%f", &zahl[i]) ) break;
    }
    wert = (zahl[0] + zahl[1]+ zahl[2]+ zahl[3]+ zahl[4]+ zahl[5])/i;
    printf("Anzahl der eingelesenen Werte: %i\n", i);
    printf("Eingelesene Zahlenfolge %.2f, %.2f, %.2f, %.2f, %.2f, %.2f \n", zahl[0], zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]);
    printf(" Der Mittelwert ist: %.2f \n", wert);
    return 0;
    }
    

Anmelden zum Antworten