fox3 Geschrieben 31. Mai 2006 Geschrieben 31. Mai 2006 Hallo, vielleicht kann mir hier jemand helfen. Ich muss ein Programm in C schreiben das 5 Namen mit zugehöriger Matrikelnummer einliest und wieder je nach auswahl nach Namen oder Martikelnummer sortiert. Er zeigt mir zwei Fehler an: (22) : error C2106: '=' : Linker Operand muss ein L-Wert sein (23) : error C2106: '=' : Linker Operand muss ein L-Wert sein Zu dem weiß ich nicht wie ich den die BubbleSort Funktion intigieren kann, bitte um hilfe. hier mein Quelltext: #include <stdio.h> #include <string.h> #define MAX 10 struct studperson { int matnr; char name[MAX]; }; void BubbleSort(int student, int Anzahl) { int i; /* erstes Element im unsortierten Teil */ int j; /* Index der aufsteigenden Blasen */ int temp; /* für Austausch zweier Elemente */ for (i = 0; i < Anzahl - 1; i++) for (j = i + 1; j < Anzahl; j++) if ((student + j) < (student + i)) { temp = (student + i); (student + i) = (student + j); (student + j) = temp; } } int main() { struct studperson student[5]; int i,a; for(i=0;i<5;i++) //Eingabe von Studenten Daten { printf("Name: "); fflush(stdin); scanf("%s",&student[i].name); printf("Matrikel-Nr: "); fflush(stdin); scanf("%i",&student[i].matnr); printf("\n"); } printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); for(i=0;i<5;i++) //Ausgabe von Studenten Daten { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } printf("Soll nach Matr-Nr (0) oder nach Name (1) sortiert werden? "); scanf("%i", &a); switch (a) { case 0: printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); for(i=0;i<5;i++) //Ausgabe von Sortierten Studenten Daten nach Matr-Nr. { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } break; case 1: printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); for(i=0;i<5;i++) //Ausgabe von Sortierten Studenten Daten nach Name { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } break; } return 0; } Zitieren
nic_power Geschrieben 31. Mai 2006 Geschrieben 31. Mai 2006 Hallo, die Fehlermeldung bezieht sich auf die beiden folgenden Zeilen: (student + i) = (student + j); (student + j) = temp; Alle Variablen sind vom Typ int. D.h. Du versuchst in dieser Zeilen einem Integer (dem Ergebnis von "student+i" das Ergebnis von "student+j" zuzuweisen (also beispielsweise "5=6"). Nic Zitieren
baba007 Geschrieben 1. Juni 2006 Geschrieben 1. Juni 2006 student ist doch ein struct array und ist somit ein zeiger auf den ersten struct. Was du machst ist zeigerarithmetik und kann nichts werden. du musst schon, die einzelnen arrayelemente vergleichen d.h. entweder mit student[zahl].matrikel oder mit student->matrikel, wobei hier, der pointer dann verschoben werden muss. student += 1; oder irre ich mich ? schon mal was vom debuggen gehört ? setz mal ein halte punkt jeweils nach den beiden zeilen und schau dir mal an was drin steht in student Zitieren
Anybody Geschrieben 1. Juni 2006 Geschrieben 1. Juni 2006 [...] void BubbleSort(int[COLOR="Red"]*[/COLOR] student, int Anzahl) { int i; /* erstes Element im unsortierten Teil */ int j; /* Index der aufsteigenden Blasen */ [COLOR="red"]studperson*[/COLOR] temp [COLOR="red"]= NULL[/COLOR]; /* für Austausch zweier Elemente */ for (i = 0; i < Anzahl - 1; i++) for (j = i + 1; j < Anzahl; j++) [COLOR="red"]if ( student[j]->matnr < student[i]->matnr ) [/COLOR] { [COLOR="Red"] temp = student[i]; student[i] = student[j]; student[j] = temp;[/COLOR] } } [...] } So sollte das dann klappen Zitieren
nic_power Geschrieben 1. Juni 2006 Geschrieben 1. Juni 2006 Hallo, student ist doch ein struct array und ist somit ein zeiger auf den ersten struct. "student" zwar ein pointer auf ein struct sein, wird aber nicht als solches übergeben: void BubbleSort(int student, int Anzahl) Nic Zitieren
pit030771 Geschrieben 2. Juni 2006 Geschrieben 2. Juni 2006 hi habe mir deinen quelltext angesehen das geht so nicht. du kannst ein struct array nict in int umwandeln. schau dir mal das an, so könnt es gehn... #include <stdio.h> #include <string> #define MAX 10 struct studperson { int matnr; char name[MAX]; }; void BubbleSort(struct studperson fstud[], int Anzah); // hier wird die funktion nur bekannt gegeben // definiert wird sie nach main int main() { struct studperson student[5]; int i,a; for(i=0;i<=4;i++) //Eingabe von Studenten Daten { printf("Name: "); fflush(stdin); scanf("%s",&student[i].name); printf("Matrikel-Nr: "); fflush(stdin); scanf("%i",&student[i].matnr); printf("\n"); } printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); for(i=0;i<=4;i++) //Ausgabe von Studenten Daten { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } printf("Soll nach Matr-Nr (0) oder nach Name (1) sortiert werden? "); scanf("%i", &a); switch (a) { case 0: printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); BubbleSort(student, i-1); // hier musst du deine funktion auch aufrufen // du musst auch die struktur übergeben // und keinen int // STRUCT in INT umwandeln geht nicht for(i=0;i<=4;i++) //Ausgabe von Sortierten Studenten Daten nach Matr-Nr. { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } break; case 1: printf("\nMatr-Nr: "); printf("Name:"); printf("\n----------------\n"); for(i=0;i<=4;i++) //Ausgabe von Sortierten Studenten Daten nach Name { printf("%i ",student[i].matnr); printf("%s",student[i].name); printf("\n"); } break; } fflush(stdin); getchar(); return 0; } // hier die sort funktion für die nummer // für den namen musst du eine neue funtion schreiben und anpassen void BubbleSort(struct studperson fstud[], int anz) { int m=1; //merker auf 1 setzen struct studperson tmp; while (m != 0) { m=0; // abbruch bedingung setzen for (int i=0; i<=anz-1; i++) { if (fstud[i].matnr > fstud[i+1].matnr) // hier musst du matnr durch name ersetzen für die sortierung nach namen // aber eine neue funktion schreiben // oder du übergibst den schalter a und fragst den ab { tmp.matnr = fstud[i].matnr ; strcpy(tmp.name , fstud[i].name) ; fstud[i].matnr = fstud[i+1].matnr; strcpy(fstud[i].name, fstud[i+1].name); fstud[i+1].matnr = tmp.matnr ; strcpy(fstud[i+1].name, tmp.name ); m=1; // wird nur wieder auf 1 gesetzt wenn zu sortierende daten gefunden werden } } } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.