zweidimensionale Struktur an eine Funktion übergeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

zweidimensionale Struktur an eine Funktion übergeben

Beitrag von forumnewbie » Di Mär 11, 2014 5:30 pm

--->TIPPFEHLER GEFUNDEN!

Hallo,

ich möchte meine zweidimensionale Struktur a) als Struktur und b) als Zeiger auf diese Struktur an meine Funktionen ausgeben1 und ausgeben2 übergeben. Diese Funktionen sollen mir den Inhalt meiner Struktur anzeigen. Die Struktur Song soll zunächst nur Informationen über zwei Lieder speichern.
Hier mein Quellcode:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ausgeben1(struct Songs[2]);
void ausgeben2(struct Songs*[2]);

struct Song{
	char Interpreter[30];
	int Erscheinungsjahr;
	char Titel[30];
};

int main(){
	struct Song songs[2];
	struct Song *psongs[2];
	psongs[0] = &songs[0];
	psongs[1] = &songs[1];

	strcpy(songs[0].Interpreter, "Interpreter 1");
	songs[0].Erscheinungsjahr = 2002;
	strcpy(songs[0].Titel, "Titel 1");
	strcpy(songs[1].Interpreter, "Interpreter 2");
	songs[1].Erscheinungsjahr = 1990;
	strcpy(songs[1].Titel, "Titel 2");
	
	ausgeben1(songs);
	ausgeben2(psongs);

	system("Pause");
	return 0;
}

void ausgeben1(struct Song songs[2]){
	for(int i = 0; i<2; i++){
		printf("%s\n", songs[i].Interpreter);
		printf("%d\n", songs[i].Erscheinungsjahr);
		printf("%s\n", songs[i].Titel);
	}
}

void ausgeben2(struct Song* psongs[2]){
	for(int i = 0; i<2; i++){
		printf("%s\n", psongs[i]->Interpreter);
		printf("%d\n", psongs[i]->Erscheinungsjahr);
		printf("%s\n", psongs[i]->Titel);
	}
}
Wenn ich die Ausgabe in der main-Funktion mache, dann funktioniert alles einwandfrei. Ich übergebe anscheinend meinen Parameter falsch, aber ich weiß nicht wie ich das richtig machen soll.

Als Fehlermeldung beim Kompilieren erhalte ich:
'ausgeben1': Konvertierung des Parameters 1 von 'Song [2]' in 'Songs []' nicht möglich
'ausgeben2': Konvertierung des Parameters 1 von 'Song [2]' in 'Songs []' nicht möglich
Was ist genau mit dem Typ Song[] gemeint und wie muss die Übergabe in diesem Beispiel richtig gemacht werden? Danke!
Zuletzt geändert von forumnewbie am Di Mär 11, 2014 6:02 pm, insgesamt 2-mal geändert.

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Re: zweidimensionale Struktur an eine Funktion übergeben

Beitrag von forumnewbie » Di Mär 11, 2014 5:54 pm

Uff, Fehler gefunden...

ich habe beim Prototypen Songs statt Song geschrieben ...

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: zweidimensionale Struktur an eine Funktion übergeben

Beitrag von mfro » Di Mär 11, 2014 6:02 pm

forumnewbie hat geschrieben: Was ist genau mit dem Typ Song[] gemeint und wie muss die Übergabe in diesem Beispiel richtig gemacht werden? Danke!
Genau hingucken.

Tips:
  1. Du bist dir offenbar nicht im klaren darüber, ob deine Struktur nun Song oder Songs heißen soll.
  2. Du hast die Funktionsprototypen an eine Stelle im Programm hingeschrieben, wo der Typ der Struktur noch nicht bekannt ist, damit wird der Strukturtyp als Funktionsparameter anonym
Ansonsten sieht mir das ganz richtig aus.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Re: zweidimensionale Struktur an eine Funktion übergeben

Beitrag von forumnewbie » Di Mär 11, 2014 6:06 pm

Hi,

habe bereits den Fehler gefunden (siehe oben). Ich sollte die Namen besser wählen, weil man drauf guckt und nicht mehr sieht, dass man sich vertippt hat. Erst nachdem ich Pause gemacht habe, habe ich den Fehler entdeckt. Weil ich die Sturktur Song -> songs genannt habe, bin ich beim Lesen des Quellcodes irgendwie durcheinander gekommen - die zwei Bezeichnungen haben sich beim Lesen im Kopf vermischt.

Danke trotzdem!

Antworten