In C eine Struktur schreiben



  • Rickytop schrieb:

    @ cler:
    danke für den hinweis,leider darf ich aber an der struktur nichts verändern und ich weiß nicht wie ich das sonst einbauen sollte. wenn ich mir arrays bilden dürfte wie ich will, wäre es einfacher. aber ich darf ja nach der aufgaben stellung nicht verändern es muss also

    struct Student      //Deklaration der Struktur erfolgt global
    {
        int matnr;
        char* name;
    };
    typedef struct Student StudiTyp;
    

    bleiben!

    da stimme ich dir voll und ganz zu, dass es einfacher wäre, ich meine aber mit einem array von strukturen so etwas:

    StudiTyp studis[40];
    


  • achso meinst du das...mom ich bastel mal 😃



  • der zeigt mir immernoch bei student_eingeben(&ausgabe) in der main ein fehler beim &-Operator. wie behebe ich das?



  • lies doch mal, was der fehler bedeutet ... 😉
    du müsstest in deiner do while schleife auch nen index oder sowas mitlaufen lassen.
    ich muss mich jetzt verpieseln, hab dir mal nen ansatz getippt, kriegste schon hin.
    wenn er bei malloc meckert, kompilierst du im c++ modus und musst casten oder auf c umstellen.
    gutes gelingen, bye.

    #define NAMELEN_MAX 63
    #define STUDENTEN_MAX 10000
    
    typedef struct tagStudent
    {
        int matnr;
        char* name;
    } Student;
    
    void student_anzeige ( Student* p, size_t n )
    {
    	size_t i;
    	for ( i = 0; i < n; i++ )
    		printf ("%d %s\n", p[i].matnr, p[i].name);
    }
    
    size_t student_eingabe ( Student* p, size_t n )
    {
    	size_t i = 0;
    	char eingabe[80*25];
    	char name[NAMELEN_MAX+1];
    	int matnr;
    
    	puts("Martielnummer und Namen eingeben, beenden mit Entertaste");
    	while ( i < n )
    	{
    		fgets(eingabe, sizeof(eingabe), stdin);
    		if ( eingabe[0] == '\n' )
    		{
    			break; // beendet durch benutzer
    		}
    		else if (2 != sscanf ( eingabe, "%d %63s", &matnr, name))
    		{
    			puts("Eingabefehler!");
    			continue;
    		}
    		else
    		{
    
    			p[i].name = malloc (strlen(name + 1));
    			if ( NULL != p[i].name )
    			{
    				p[i].matnr = matnr;
    				// ... strcpy benutzen, kriegste schon hin ...
    				i++;
    			}
    			else
    			{
    				// fehlerbehandlung ...
    				break;
    			}
    		}
    	}
    	return i; // anzahl eingegebener studenten
    }
    int main(void)
    {
        Student studenten[STUDENTEN_MAX];
    	size_t n = student_eingabe(studenten, STUDENTEN_MAX);
    	student_anzeige(studenten, n);
        return 0;
    }
    


  • danke dir aber glaube damit kann ich noch weniger anfangen 😃
    Denn leider habe ich vergessen zu erwähnen, dass wir kein string.h und die dazugehörigen funktionen wie strlen,strcpy benutzen dürfen. das macht es ja für mich ungemein schwer...erst darf ich keine arrays bilden wie ich mag und dann die einfachen string funktionen auch nicht nutzen...

    Mein problem bleibt soviel stehen, was meint visual studio damit wenn es an der &ausgabe sagt: Konvertierung des Parameters 1 von 'StudiTyp (*)[20]' in 'StudiTyp *[]' nicht möglich

    Ich verstehe es ja leider nicht und kann mir deshalb nicht helfen...



  • schreib dir doch deine eigene strlen und strcpy funktion, das sind wenige zeilen.
    dein compiler will dir mitteilen, dass die zeiger nicht kompatibel sind.



  • ja das könnte ich tun aber ich möchte wissen wieso der fehler dort ist bzw wie ich diesen fehler an dem Bretzeloperator behebe, sonst läuft mein programm und wirft mir ein student auch in tabellen form durch die printf anweisung aus...
    Kann mir nicht einer an von euch einfach nur sagen was ich an dieser stelle ändern muss damit die arrays von ausgabe richtig abgespeichert werden bzw wie ich das hinbekomme das die zeiger kompatiel werden??



  • du hast doch vom cler code gepostet bekommen. da wird auch ein zeiger als parameter übergeben, brauchste doch nur abschreiben. 🙄



  • sorry, aber ich bin zu blind um es zu erkennen...
    man hätte ja auch einfach schreiben können an welcher stelle ich mein code wie ändern muss...



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • C++ Forumbot schrieb:

    Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Martin hätte den Thread wohl besser gleich in das C-Forum verschieben sollen.
    Da liegen auch die beiden anderen: http://www.c-plusplus.net/forum/298882, http://www.c-plusplus.net/forum/259783



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Rickytop schrieb:

    Hallo Liebes C Forum,

    ...
    b) Schreiben Sie die Struktur in eine Klasse um und ergänzen Sie diese mit der Funktion student_eingeben()

    Du bist falsch hier, in C gibt es keine Klassen, deine Aufgabenstellung ist also in C prinzipiell nicht realisierbar.


Anmelden zum Antworten