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 nochm1->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 sollich 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->jist, 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 kanndas 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.