Problem mit Struktur
-
tach
folgender sachverhalt:
ich hab eine struktur angelegt ,diese als eindimensionales Array genutzt ,funzt soweit auch ,jetzt will ich aber darin etwas vertauschen ,und zwar nicht einfach eine varibale in der struktur sondern einen gesamten strukturindes,d.h. nicht nur struktur[i].element1 mit struktur[i-1].element1
sondern struktur[i] mit struktur[i-1]
change1 = ortsteil[i-1]; ortsteil[i-1] = ortsteil[i]; ortsteil[i] = change1;
("Ortsteil" ist die Struktur)
funzt aber nicht ,compiler sagt "need explizit cast to convert"
wie kann ich das problem also lösen ohne das ich jedes element einzeln vertauschen muss?
danke
-
Ich nehme an, dass change1 eine Variable vom Typ der Struktur ist?
Ein bißchen mehr Code sollte es sonst schon sein...
-
neinein ,change dient nur zum tauschen
oder gibts direkt eine funktion zum tauschen?
der code is nicht wichtig, mein problem wird auch ohne code klar...
-
Rein theoretisch funktioniert das schon so. Aber TactX hat schon Recht, ohne Code (oder mehr Informationen - wie zB Typ von change1 und ortsteil) können wir dir nicht beantworten, warum der Compiler diese Fehlermeldung ausspuckt.
-
also gut:
der structarray:
typedef struct { char name[20]; double flaeche,dichte; long int bev; }datensatz;
(definiert in der main fuktion :
datensatz ortsteil[20]
und die seperate funktion in der das tauschen/sortieren ausgeführt wird:
void sortieren (datensatz ortsteil[],int length)
{
int wahl,i;
long int change1;
double change2;
printf ("\nNach Bevoelkerung(1), nach Flaeche(2) oder alphabetisch(3) ordnen ?: ");
scanf ("%i",&wahl);
switch(wahl)
{
case 1: for (i=1;i<length;i++)
{
if (ortsteil[i].bev > ortsteil[i-1].bev)
{
change1 = ortsteil[i-1];
ortsteil[i-1] = ortsteil[i];
ortsteil[i] = change1;
}
}
break;
case 2: for (i=1;i<length;i++)
{
if (ortsteil[i].flaeche > ortsteil[i-1].flaeche)
{
change2 = ortsteil[i-1];
ortsteil[i-1] = ortsteil[i];
ortsteil[i] = change2;
}
}
break;
case 3: break;
default: printf("\nFehler!");
}
}
-
huch,
void sortieren (datensatz ortsteil[],int length) { int wahl,i; long int change1; double change2; printf ("\nNach Bevoelkerung(1), nach Flaeche(2) oder alphabetisch(3) ordnen ?: "); scanf ("%i",&wahl); switch(wahl) { case 1: for (i=1;i<length;i++) { if (ortsteil[i].bev > ortsteil[i-1].bev) { change1 = ortsteil[i-1]; ortsteil[i-1] = ortsteil[i]; ortsteil[i] = change1; } } break; case 2: for (i=1;i<length;i++) { if (ortsteil[i].flaeche > ortsteil[i-1].flaeche) { change2 = ortsteil[i-1]; ortsteil[i-1] = ortsteil[i]; ortsteil[i] = change2; } } break; case 3: break; default: printf("\nFehler!"); } }
-
change1 und change2 müssen vom Typ datensatz sein. Eben das was ich in meinem ersten Beitrag schon gesagt habe
-
ohh
jetzt stichts mir auch ins auge , ich depp ich
danke für den hinweis