Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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;


}

Geschrieben

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

Geschrieben

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

Geschrieben


[...]

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

Geschrieben

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

Geschrieben

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

			}

		}

	}


}


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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...