Printf von Arrays die sich in einer Struktur befinden



  • Hallo ihr,

    habe eine header datei mit

    struct parabel {
    double a;
    double b;
    double c;
    };

    und in meiner int main hab ich stehen:
    struct parabel p[] = {

    {1,2,3}, // 2

    {2,5,-19}, //-22

    {0,0,0},

    {-1,0,0} // 0
    };

    Nun möchte ich nach einigen sortierschritten das aktuelle array anzeigen. Wie mache ich das so einfach wie möglich.

    Habe schon verschiedene Dinge probiert. unter andrem

    printf("Array is %s:%s:%s\n", p[0],p[1],p[2],p[3]); gibt mir auch den Fehler:expects char but type is struct parabel??

    Ich bin um baldige Hilfe sehr dankbar.



  • Das %s bei printf steht für string. (nicht für struct).
    Da ein String in C aus einem char -Array besteht, erwartet printf auch ein char* (deine Fehlermeldung ist falsch, du hast den * unterschlagen)

    Du musst jedes Element der struct und auch jedes Element des Arrays extra ausgeben.
    Das Array kannst du mit einer Schleife machen.

    Der Formatspecifier für double ist %f



  • Ok eine Schleife. Wie mach ich das dann für dieses Beispiel?

    Das Argument: "format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘struct parabel’ [-Wformat=].

    Für %f oder auch %d gibt er mir aus "array subscript is not an integer".



  • Miciku schrieb:

    Ok eine Schleife. Wie mach ich das dann für dieses Beispiel?

    Das Argument: "format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘struct parabel’ [-Wformat=].

    Für %f oder auch %d gibt er mir aus "array subscript is not an integer".

    Könnte man das "printf("Array is %s:%s:%s\n", p[0],p[1],p[2],p[3]);" noch anpassen das es funktioniert?



  • Du kannst in printf nicht direkt die Struktur ausgeben. Aber du kannst es z.B wie folgt machen:

    int main(void)
    {
        int i;
        struct parabel p[] =
        {
            {1,2,3},
            {2,5,-19}, 
            {0,0,0},
            {-1,0,0} 
        };
    
        for ( i = 0; i < 4; ++i )
        {
            printf("(%lf,%lf,%lf)\n", p[i].a, p[i].b, p[i].c);
        }
    
        return 0;
    }
    


  • Super vielen dank 🙂 🙂 🙂
    Wieder was gelernt.


Anmelden zum Antworten