uebergabe von typedef, arrays,...



  • hallo community..;)

    ich habe eine frage zum übergeben!
    als Beispiel:
    ich muss ein programm mit 3 Modulen schreiben.
    1 Header, 1 C(Main), 1 C für Unterprogramme!

    nun die Frage:
    wie übergebe ich ein:

    typedef struct
    {
    int nummer;
    int ip;
    char name;
    }
    

    nachdem ich alles eingelesen habe, weiß ich nicht wie ich das eingelesene in das nächste unterprogramm bringe?
    Vl könnt ihr mir das mit einem Beispiel zeigen? bitte

    mfg.
    goofie



  • // user.h
    
    #ifndef USER_H 
    #define USER_H 
    
    typedef struct 
    { 
    	int nummer; 
    	int ip; 
    	char* name; 
    }User;
    
    // Funktionsdeklarationen zum Bekanntmachen der Funktionen in *.c Dateien
    void user_input ( User* u );
    void user_view ( User* u );
    
    #endif // USER_H 
    
    // user.c
    #include <stdio.h> // printf
    #include "user.h" // Der Typ User wird der Datei user.c bekannt gemacht.
    
    void user_input ( User* u ) // Ein bisschen fake input.
    {
    	u->ip = 123;
    	u->name = "Kyle Riemen";
    	u->nummer = 1;
    }
    
    void user_view ( User* u )
    {
    	printf  ( "%s %d %d\n", u->name, u->nummer, u->ip );
    }
    
    // main.c
    #include "user.h" // Die Funktionen user_input, user_view, sowie der Typ
    // User ist nun in main.c bekannt.
    int main()
    {
    	User user = {0};
    	user_input ( &user );
    	user_view ( &user );
    	return 0;
    }
    


  • Ok, bei einer 'richtigen' Benutzereingabe würde man wohl eher ein char Array, anstelle eines char* nehmen und die Zeichen dann mit fgets oder so reinfriemeln:

    #define NAME_BUFSIZE 64
    
    typedef struct 
    { 
    	int nummer; 
    	int ip; 
    	char name[NAME_BUFSIZE]; 
    }User;
    

    ...



  • Bei ganz vielen Benutzern und wenig RAM kannst du das auch dynamisch machen:

    typedef struct 
    { 
    	int nummer; 
    	int ip; 
    	char* name; 
    }User;
    
    char* remlf ( char* buf ) // remove linefeed
    { 
        char* p = strrchr ( buf, '\n' ); 
        if ( p != NULL ) 
            *p = 0; 
        return p; 
    } 
    
    int user_input ( User* u )
    {
    	char buf[128] = {0};
    	if ( NULL == ( fgets ( buf, sizeof ( buf ), stdin )))
    		return 1;
    	remlf ( buf ); // '\n' - Zeichen entfernen.
    	memset ( u, 0, sizeof(*u) );
    	if ( NULL == ( u->name = malloc ( strlen(buf) +1 ) ))
    		return 1;
    	strcpy ( u->name, buf );
    	return 0;
    }
    


  • wow.. 😉
    coole sache.. danke.. 😉
    is alles drinnen was ich gesucht habe..;)



  • hey leute ich brauch hilfe.. 😞

    //HEADER
    
    // typedef.h
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #ifndef typedef_h
    #define typedef_h 1
    
    typedef struct type
    {
      int ip;				    
      int nr;        
      char name[20];	
    }type;
    
    void sort(type *u);
    void ausgabe(type *u);
    #define n 10
    
    #endif
    
    //MAIN.C
    #include <stdio.h>
    #include <stdlib.h>
    #include "typedef.h"
    
    int main(void)
    {
    	type u = {0};
    	sort(&u);
    	ausgabe(&u);
    	return (0);
    }
    
    //TYPEDEF.C
    // typedef.c
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "typedef.h"
    
    void sort(type *u)
    {
    	FILE* fp=NULL;	
    	int x=0;	
    	int save_sort;
    	int ueberpruefung=0;
    
    	if((fp=fopen("Sortiert.txt","wt"))==NULL)
    	{
    		printf("Fehler beim Oeffnen von Sortiert.txt");
    	}
    	printf("Unsortiert: \n");
    	fprintf(fp,"Unsortiert: \n");
    	while(x!=n)		//Erstellen der Zahlen in file und Konsole
    	{
    		u[x].nr=rand() %1000;
    		u[x].ip=rand() %10000;
    		printf("%d\t", u[x].nr);
    		printf("%d\t\t", u[x].name);
    		printf("%d\n", u[x].ip);
    		fprintf(fp,"%d\t", u[x].nr);
    		fprintf(fp,"%d\t\t", u[x].name);
    		fprintf(fp,"%d\n", u[x].ip);
    
    		x++;
    	}
    	printf("\n\n\n");
    	x=0;
    	// sortieren
    	do
    	{		
    		x=0;
    		ueberpruefung=0;
    		while(x!=(n-1))
    		{
    			if(u[x].nr > u[x+1].nr)
    			{
    				save_sort=u[x+1].nr;
    				u[x+1].nr=u[x].nr;
    				u[x].nr=save_sort;
    				ueberpruefung=1;
    			}
    			x++;
    		}
    		if( ueberpruefung==1)
    		{
    			printf("Sortierung erfolgreich");
    		}
    	fclose(fp);
    }
    
    void ausgabe(type * u)
    {
    		int x=0;
    		FILE* fp = NULL;
    
    		fp = fopen("text.txt","wb");
    		if(fp == NULL)
    		{
    			exit(0);
    		}
    		while(x!=n)
    		{		
    			printf("%d\t", u[x].nr);
    			printf("%d\t\t", u[x].name);
    			printf("%d\n", u[x].ip);
    			fprintf(fp,"%d\t", u[x].nr);
    			fprintf(fp,"%d\t\t", u[x].name);
    			fprintf(fp,"%d\n", u[x].ip);
    			x++;
    		}
    		fclose(fp);
    }
    

    FEHLER:
    1>c:\users\ama\desktop\hu18_bullesort\hu18_bullesort\bubblesort\bubblesort\typedef.c(15) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(237): Siehe Deklaration von 'fopen'
    1>c:\users\ama\desktop\hu18_bullesort\hu18_bullesort\bubblesort\bubblesort\typedef.c(59) : error C2059: Syntaxfehler: 'Typ'
    1>c:\users\ama\desktop\hu18_bullesort\hu18_bullesort\bubblesort\bubblesort\typedef.c(62) : error C2275: 'FILE': Ungültige Verwendung dieses Typs als Ausdruck
    1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(69): Siehe Deklaration von 'FILE'

    ich versteh die fehler nicht.. 😞



  • kann mir wer helfen? 😞



  • Was geht denn nicht? Deine fehlerhafte Codes wird hier niemand durch gucken und dann in korrekten Code umwandeln. Und ein bisschen Geduld kannst du ruhig haben. Sei froh, dass dir überhaupt jemand hilft.

    Zeile 64,67, 110, 113: es wird ein String erwartet, also %s anstatt %d.
    Zeile 75: Willst du jetzt eine do-while-, oder eine while-Schleife haben? Guck dir noch mal an wie deren genaue Syntax lautet.



  • danke für die Hilfe, jetz geds..;)
    sry... hatte es etwas eilig.. 😞


Anmelden zum Antworten