Ausgabe eines StrukturArrays schlägt fehl



  • chmbw schrieb:

    void habe ich jetzt intuitiv beim aufruf von

    eingabe()
    

    weggelassen, was genau erwartet der Compiler denn wenn ichs eintragen würde?!

    Wenn nichts zwischen den Klammern steht, dürfen die Argumente beliebig sein. Damit ist der Prototyp nicht sehr aussagekräfig und könnte die Fehlersuche erschweren. Deshalb ist das void nützlich (bei cb() hast du's übersehen).

    Mit dem Eingabepuffer ist scheinbar alles in Ordnung, mea culpa.

    Wenn man beim Eingaben der Zeilen etwas sagt, was keine Zahl ist, reagiert das Programm unerwartet.
    🙂



  • wenn ich jetzt in Zeile 49 schreibe:

    Matrizen[x] = eingabe(void);
    

    kriege ich folgenden Error:

    In function 'main':
    Line 49: error: expected expression before 'void'
    Line 49: error: too many arguments to function 'eingabe'



  • chmbw schrieb:

    wenn ich jetzt in Zeile 49 schreibe:

    Matrizen[x] = eingabe(void);
    

    kriege ich folgenden Error:
    ...

    Ich meinte vergessen in Zeile 59. Das void muss nur bei Prototypen und Funktions-Definitionen hin, beim Aufrufen nicht.
    🙂



  • chmbw schrieb:

    Line 49: error: too many arguments to function 'eingabe'

    Das ist übrigens eine der Fehlermeldungen, die du ohne das void im Prototypen unterdrückt hättest.
    🙂



  • aaah, wieder was gelernt^^ vielen lieben Dank!

    Hier meine aktuelle Version:

    http://codepad.org/zJmoxwSf

    mngbd schrieb:

    chmbw schrieb:

    wieso darf ich das denn nicht bzw. was ist das Problem dabei? Ich änder doch keine Werte.

    Das sag ich dir, wenn vor der Schleife keine Segfaults mehr kommen.
    🙂

    was ist jetzt mit meinen Indizes in der for-Schleife? 😉



  • chmbw schrieb:

    was ist jetzt mit meinen Indizes in der for-Schleife? 😉

    Du hattest y und i verwechselt. 🙂

    chmbw schrieb:

    die Datentypen und das i / y hätte ich echt selbst finden müssen... *peinlich* 😞

    Braucht dir nicht peinlich zu sein, sowas schnell zu sehen ist Übungssache. Mir ist es auch nicht aufgefallen.
    🙂



  • hmm, aber ich kriege nach wie vor nicht die Werte ausgegeben die ich ursprünglich eingegeben habe...



  • chmbw schrieb:

    hmm, aber ich kriege nach wie vor nicht die Werte ausgegeben die ich ursprünglich eingegeben habe...

    Stimmt, hat bei mir bei einer 2x2-Matrix gerade zweimal die erste Zeile ausgegeben.

    Zeile 140:

    printf("%lf",Matrizen[i].werte[x][y]);
    //                             ^
    //                             hier besser x statt i
    

    Das hilft, solange man keinen Unsinn eingibt:

    Anzahl der Matrizen eingeben: 1
    
    Matrix Nr. 1
    
    Zeilen: 2
    
    Spalten: 2
    Werte bitte zeilenweise eingeben!
    
    Zeile 1:1.0
    peter
    
    Zeile 2:
    Matrix 1:
    Zeilen: 2
    Spalten: 21.0000000.0000000.0000000.000000
    

    🙂



  • vielen vielen lieben Dank für die schnelle und klasse Hilfe! 🙂
    Dann mach ich mich jetzt mal an das abfangen von fehlerhaften Eingaben 😉
    Gibts nicht einen Befehl womit ich eine Typüberprüfung durchführen kann? Oder muss ich die Eingabe als String einzeln als Zahl zwischen 0 und 9 prüfen?



  • chmbw schrieb:

    Gibts nicht einen Befehl womit ich eine Typüberprüfung durchführen kann? Oder muss ich die Eingabe als String einzeln als Zahl zwischen 0 und 9 prüfen?

    Die Rückgabe von scanf() sagt dir, wie viele Dinge eingelesen und umgewandelt wurden, oder EOF. Wahrscheinlich reicht es, zu prüfen, ob scanf() 1 zurückgibt. Dann könnten zwar nach einer gültigen Zahl noch andere Zeichen kommen:

    Zeile 1:1.0peter<return>
    

    Aber die Zeichen "peter" und das \n holst du mit cb() sowieso wieder aus dem Puffer raus.
    🙂


Anmelden zum Antworten