scanf in Array speichern



  • Hallo allerseits!

    Ich habe ein kleines Problem beim Programmieren mit C (Codeblocks und MinGW).
    Undzwar möchte ich verschiedene Werte zu begin vom Benutzer einlesen lassen und diese dann weiter verarbeiten. Da ich nicht weiß, wieviele Werte der Benutzer speichern möchte, will ich das ganze in ein Array speichern.

    Hier mein Code:

    // Anzahl der Ausgaben beim User nachfragen //
        int anz_ausgabe;
        int schl_ausgabe=0;
        printf("Bitte Anzahl an gewuenschten Ausgaben eingeben\n");
        scanf("%d", &anz_ausgabe);
    
        // Array mit der Anzahl der Ausgaben erstellen //
        int wg[5][3];
    
        while(schl_ausgabe<anz_ausgabe){
            printf("Wert 1 von Ausgabe Nummer %d eingeben:\n", schl_ausgabe+1);
            scanf("%f", &wg[schl_ausgabe][1]);
            printf("Wert 2 von Ausgabe Nummer %d eingeben:\n", schl_ausgabe+1);
            scanf("%f", &wg[schl_ausgabe][2]);
            system("cls");
            schl_ausgabe++;
        }
    
        schl_ausgabe=0;
        while(schl_ausgabe<anz_ausgabe){
            printf("Nummer %d: Wert 1: %f Wert 2: %f\n", schl_ausgabe+1, wg[schl_ausgabe][1], wg[schl_ausgabe][2]);
            schl_ausgabe++;
        }
    

    Das Problem ist jetzt, dass ich bei der Ausgabe nicht meine zuvor gespeicherten Werte wiederfinde. Was mache ich falsch?

    Grüße!

    EDIT:
    Fehler war in Zeile 8:

    int wg[anz_ausgabe][3];
    float wg[anz_ausgabe][3]; // Muss natürlich float sein
    

  • Mod

    %f ist der Formatspezifizierer für float. Bitte Compilerwarnungen aktivieren! Solche Simpelfehler findet der Compiler sofort.

    Arrays fangen bei 0 an, nicht bei 1. Beim ersten Index machst du es komischerweise richtig, beim zweiten nicht. 😕 Abgeschrieben?

    Was, wenn der Benutzer mehr als 5 oder weniger als 0 für anz_ausgabe eingibt?

    Mag vielleicht noch nicht dran gekommen sein, aber kennst du for-Schleifen? Falls ja: Bieten die sich hier nicht irgendwie an?



  • SeppJ schrieb:

    %f ist der Formatspezifizierer für float. Bitte Compilerwarnungen aktivieren! Solche Simpelfehler findet der Compiler sofort.

    Okay, stimmt.

    SeppJ schrieb:

    Arrays fangen bei 0 an, nicht bei 1. Beim ersten Index machst du es komischerweise richtig, beim zweiten nicht. 😕 Abgeschrieben?

    Ich hatte das Problem bei einer Lookup Tabelle mal, dass ich komischerweise den zweiten Eintrag bei 1 und nicht 0 beginnen musste. Deshalb habe ich nach einem Beispiel geschaut. Bei diesem war das genau so. Dennoch habe ich es zuerst intuitiv auch richtig gemacht.

    SeppJ schrieb:

    Was, wenn der Benutzer mehr als 5 oder weniger als 0 für anz_ausgabe eingibt?

    Die 5 kommt dummerweise noch von meiner Fehlersuche in der ich dem Array eine feste Größe gegeben habe. Eigentlich sollte dort folgendes stehen (habe es im ersten Post mal bearbeitet)

    float wg[anz_ausgabe][3];
    

    Und hier habe ich gerade meinen Fehler gefunden 🙄
    Wie du dir sicher denken kannst, muss das Array natürlich auch float sein.

    Der User wird keine 0 eingeben (genauso wie keine Zahl über 200), weil ich der einzige User bin und wenn ich keine Ausgabe wünsche, dann ruf ich das Programm nicht auf 😃

    SeppJ schrieb:

    Mag vielleicht noch nicht dran gekommen sein, aber kennst du for-Schleifen? Falls ja: Bieten die sich hier nicht irgendwie an?

    Doch, aber manchmal ziehe ich die while Schleife vor.

    Danke für deine Hilfe


Anmelden zum Antworten