structure array / aufbau, zugriff



  • ich bin am verzweifeln, ich versuche seit mehreren tagen eine lösung dafür zu finden, jedoch scheitere ich.

    es geht um folgendes:

    es soll eine structure aufgebaut werden, die ein array mit vor und nachname einer person beinhaltet. es gibt mehrere personen, dementsprechend auch mehrere arrays. die struktur soll aber erhalten bleiben.

    mit hilfe eines switchs (muss nicht weiter erläutert werden, dient für Sie nur zur verständlichkeit), wird ausgewählt, ob man personen ins nächstleere array hinzufügen möchte, also mit vor und zunamen, oder alle personen, die derzeit registriert sind, auslesen möchte.

    so weit bin ich gekommen:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Person{char vorname[10];char nachname[10];} pers;
    
     //pers;
    	//;
    	pers liste[20];
    
    	int einscan(pers *liste);
    	int ausgabe(pers liste);
    
    	int einscan(pers *liste){
    		int i;
    		//char v[10];
    		//char n[10];
    		printf("vorname?");
    		fflush(stdout);
    		scanf ("%s",liste->vorname);
    		//liste->vorname==v;
    
    		printf("nachname?");
    		fflush(stdout);
    		scanf ("%s",liste->nachname);
    		//liste->nachname==n;
    		i++;
    
    	}
    	int ausgabe(pers liste){
    		int k=0;
    		for(k=0;k<20;k++){
    			printf("%d %s %s",k ,liste.vorname,liste.nachname); //%c usw. es gibt n
    
    		}
    	} 
    int main(void)
    
    { 		
    	int auswahl;
    	int exit=1;
    	/*char p[20];*/
    
    	/*struct*/ 
    
    	while(exit==1){
    		printf ("menue");
    		fflush(stdout);
    	scanf ("%d",&auswahl);
    
    	switch (auswahl) {	
    			case 1:
    				//printf("Geben sie Vornamen und Nachnamen ein: ");
    				//fflush(stdout);
    				einscan(liste);
    				break;
    			case 2:
    				ausgabe(*liste);
    				break;
    			case 3:
    				exit=0;
    				break;
    
    			}
    	}
    
    }
    

    mein problem liegt darin, dass wenn ein vor- und nachname eingegeben wird, dies nicht nur für das 1. array übernommen wird, sondern für alle definierten arrays.
    wie lässt sich diese problematik lösen? hat jemand vorschläge?

    zusätzlich dazu kann ich das array nicht unbestimmt lassen; die größe muss definiert sein... weiß jemand warum?

    ich freue mich über jede hilfe



  • das ganze soll in c realisiert werden.
    dem ist noch hinzuzufügen, dass eine lösung ohne die string.h bib gesucht wird.

    danke



  • Der Array muss eine definierte Größe haben, da es sich auf dem Stack befindet. Objekte die auf dem Heap erstellt werden können eine beliebige Größe habe, bzw. diese variieren. Siehe malloc/calloc/realloc/free. Der Nachteil ist, dass du für die Speicherverwaltung zuständig bist, was aber unumgänglich wird wenn du weiter programmeiren lernen möchtest.

    int einscan(pers *liste, int size); //besser ist idr. eine solche Signatur bei Übergabe von Arrays
    

    Nun kannst du beliebig viele Einträge machen und auch gleich prüfen, ob der Array noch gültig ist.

    liste[i].vorname
    

    Noch als Tipp, wenn du einen definierten Array als Zeiger übergibst, kannst du ihn in der Funktion wieder als Array ansprechen. Der Schritt zur Schleife und der Abfrage wollen sie eine weitere Person eingeben ist da nicht mehr weit.

    Die frage stellt sich mir aber, was macht das UNINITIALISIERTE int i in deiner Funktion?



  • #define MAXPERSON 20
    typedef struct {char vorname[10],nachname[10];} Person;
    
        void einscan(Person *liste){
            printf("vorname?");
            fflush(stdout);
            scanf ("%9s",liste->vorname);while( getchar()!='\n' );
            //liste->vorname==v;
    
            printf("nachname?");
            fflush(stdout);
            scanf ("%9s",liste->nachname);while( getchar()!='\n' );
            //liste->nachname==n;
        }
        void ausgabe(Person *liste,int e){
            int k=0;
            for(k=0;k<e;k++)
                printf("%d %s %s",k+1 ,liste[k].vorname,liste[k].nachname);
        }
    
    int main()
    {
      Person liste[MAXPERSON];
        int auswahl, weiter=1, pz=0;
    
        while(weiter){
            printf ("menue");
        scanf ("%d",&auswahl);while( getchar()!='\n' );
    
        switch (auswahl) {
                case 1:
                    if(pz<MAXPERSON-1) einscan(&liste[pz++]);
                    break;
                case 2:
                    ausgabe(liste,pz);
                    break;
                case 3:
                    weiter=0;
                    break;
                }
        }
        return 0;
    }
    


  • perfekt!

    fflush bei der ausgabe noch hinzugefügt, und es klappte

    vielen dank



  • weiß jemand zufällig wie ich in der ausgabe statt einzeln den vorname-array und den nachname-array auszugeben BEIDES auf einmal ausgeben kann? sprich vor und nachname sollen festdefiniert und nicht trennbar sein... (ich weiß, graphisch macht das keinen unterschied)


Anmelden zum Antworten