Veröffentlicht 31. Mai 200619 j 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; }
31. Mai 200619 j 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
1. Juni 200619 j 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
1. Juni 200619 j [...] 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
1. Juni 200619 j 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
2. Juni 200619 j 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 } } } }
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.