struct: unvorbereitete Ausgabe



  • leider dein code sagt immer ungleich wobei ja 2 gleiche zahlen sind,

    int compare(struct maximo* m1, struct maximo* m2) {
       return m1->i == m2->i && m1->j == m2->j;
    }
    

    deshalb habe ich das verbessert , damit auf gleich kommt

    int vergleiche (struct maximo *sp1, struct maximo *sp2) {
        if ((sp1->i && sp1->j == sp2->i && sp2->j) == 0) {
           return 0; }
         else {
              return 1; }  }
    

    und thx for free 😉 habs vergessen
    und ich weiss noch nicht so geneu wo genau der fehler steht und wie ich es beseitigen kann bzw. initialisieren
    ich glaube es liegt in der zeile:

    funktion(maxi);
    

    mehr weiss ich leider nicht

    danke sehr
    regards!



  • maximo schrieb:

    deshalb habe ich das verbessert , damit auf gleich kommt

    int vergleiche (struct maximo *sp1, struct maximo *sp2) {
        if ((sp1->i && sp1->j == sp2->i && sp2->j) == 0) {
           return 0; }
         else {
              return 1; }  }
    

    Du meinst verschlimmbessert? 🙂
    Du solltest dich vielleicht nochmal näher mit Operatoren beschäftigen, denn ich glaube nicht, dass du das möchtest, was der Code letztendlich macht.
    Wenn dein Programm mit der Funktion von interpreter ungleich sagt, dann sind die structs auch ungleich.
    Ein Tipp noch

    m1->i == m2->i && m1->j == m2->j
    

    ist ein boolscher Ausruck, der entweder false oder true liefert. false evaluiert zu 0, true zu 1.



  • maximo schrieb:

    leider dein code sagt immer ungleich wobei ja 2 gleiche zahlen sind,

    int compare(struct maximo* m1, struct maximo* m2) {
       return m1->i == m2->i && m1->j == m2->j;
    }
    

    deshalb habe ich das verbessert , damit auf gleich kommt

    int vergleiche (struct maximo *sp1, struct maximo *sp2) {
        if ((sp1->i && sp1->j == sp2->i && sp2->j) == 0) {
           return 0; }
         else {
              return 1; }  }
    

    und thx for free 😉 habs vergessen
    und ich weiss noch nicht so geneu wo genau der fehler steht und wie ich es beseitigen kann bzw. initialisieren
    ich glaube es liegt in der zeile:

    funktion(maxi);
    

    mehr weiss ich leider nicht

    danke sehr
    regards!

    Meine Funktion compare funktioniert. Du musst einen Fehler beim Aufruf machen.
    Deine Funktion vergleiche ist Müll *g
    Der andere "Fehler" liegt darin, dass du, wie ich schon sagte, den allokierten Speicher nicht initialisierst. Du musst also z.B. sowas schreiben:

    maxi = ein();
    maxi->i = 10;
    maxi->j = 2;
    


  • interpreter schrieb:

    Meine Funktion compare funktioniert. Du musst einen Fehler beim Aufruf machen.

    Ich denke, der Fehler ist klar. Ich gehe einfach mal davon aus, dass maximo einfach deine Funktion genommen hat, ohne die Auswertung des Aufrufs anzupassen. Das gibt natürlich falsche Ausgaben. Warum? Nunja, einfach nochmal meinen letzten Post lesen.



  • ein problem wär ich mal los 😃
    aber das mit dem vergleichen wie ihr meint geht nicht so wie es soll

    ich habe es geändert aber funktionieren tuts nicht
    ich hab die funktion jetzt so:

    int vergleiche (struct maximo *sp1, struct maximo *sp2) {
        if ((sp1->i ==  sp2->i && sp1->j == sp2->j) == 0) {
           return 0; }
         else {
              return 1; }  }
    

    den aufruf so:

    if (vergleiche(&max1 , &max2) == 0){
       printf("Beide Strukturen sind gleich\n"); }
    else  {
          printf("Nicht gleich\n"); }
    

    initialisieren:

    struct maximo max1 = {111};
    struct maximo max2 = {1};
    

    und was soll jetzt geändert werden? bitte?



  • interpreter schrieb:

    ...und bekommst dadurch den Wert des am weitest rechts stehenden Ausdrucks ( int i=(3,4,5) weist i z.B. 5 zu).

    hat das irgendeinen praktischen nutzen?



  • maximo schrieb:

    int vergleiche (struct maximo *sp1, struct maximo *sp2) {
        if ((sp1->i ==  sp2->i && sp1->j == sp2->j) == 0) {
           return 0; }
         else {
              return 1; }  }
    

    ich nehme mal an die willst nur teste ob

    sp1->i gleich sp2->i
    und
    sp1->j gleich sp2->j

    ist, so wie du es machst darfst du die Ueberpruefung auf "0" nicht mehr machen
    das bedeutet naemlich
    du vergleichst die ausdruecke in den klammern wenn diese gleich sind
    hat der ausdruck in der klammer den wert 1 (wahr)

    ==>

    if((1) == 0) -> 0

    ==>

    if (0)

    gib einfach das die Abpruefung auf "0" also das "== 0" bei der if abfrage weg
    dann sollte es funktionieren



  • net schrieb:

    interpreter schrieb:

    ...und bekommst dadurch den Wert des am weitest rechts stehenden Ausdrucks ( int i=(3,4,5) weist i z.B. 5 zu).

    hat das irgendeinen praktischen nutzen?

    Nicht wirklich. Man sieht sowas aber hin und wieder in solchen "wer bastelt den kürzesten und undurchsichtigsten Code" Fragmenten.

    @maximo
    Nichts gegen dich, aber stellst du dich immer so an? 🙂 Ich hab dir doch schon zweimal impliziert, dass du den Aufruf anpassen musst.
    Seit C99 gibt es übrigens einen echten boolschen Typ. Der würde hier recht gut passen

    #include <stdbool.h>
    //...
    bool vergleiche(struct maximo* sp1, struct maximo* sp2)
    {
        return sp1->i == sp2->i && sp1->j == sp2->j;
    }
    //...
    if (vergleiche(&max1, &max2))
        printf("Beide Strukturen sind gleich\n");
    else
        printf("Nicht gleich\n");
    

    Manchmal sind die kürzesten Lösungen auch die einfachsten. 😉



  • das programm soll nur zeigen was man mit struct machen kann und wie es gemacht wird

    nun, ich kann noch nicht so gut c damit ich aus einen 20 zeiligen code
    4 zeilen machen kann 😃

    das programm soll nur lehrreich sein. Wenn nicht für die anderen dann wenigstens für mich.

    Man sieht sowas aber hin und wieder in solchen "wer bastelt den kürzesten und undurchsichtigsten Code" Fragmenten.

    das will ich auf garkeinen fall.

    Nichts gegen dich, aber stellst du dich immer so an?

    sorry, ich bin noch nicht so gut wie ihr, deshalb bitte ich euch um hilfe.

    Ich hab dir doch schon zweimal impliziert, dass du den Aufruf anpassen musst.

    das habe ich schon verstanden, nur wenn ich es nicht anpassen kann, weil ich nicht so gut bin?
    also gibt mich noch nicht auf, plz
    ich lern ja erst
    thx



  • maximo schrieb:

    also gibt mich noch nicht auf, plz

    Naja, mal abwarten ... ne war nur Spass. 🙂 Am wichtigsten ist, dass du dich selbst nicht aufgibst. Immerhin haben wir alle mal klein angefangen. 😉


Anmelden zum Antworten