Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;


}

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

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


[...]

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.