1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Strukturen&Pointer

    • Frage
  • Synox
  • 10. April 2005 um 22:20
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Synox
    Punkte
    75
    Beiträge
    10
    • 10. April 2005 um 22:20
    • #1

    Hallo zusammen.
    Wir nehmen derzeit die Pointer in unserem C-Kurs durch und werden ab nächste Woche im Zuge dazu auch mit Strukturen arbeiten.
    Da ich so fleissig bin :lol: wollte ich schon mal vorarbeit leisten und habe ein Programm geschrieben und Variablen aus einer Struktur einzulesen und auszulesen.

    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[30];
    		char tel[30];
    
    
    };
    
    
    void main()
    {
    
    
    		int anz=1;
    		int i=0;
    		int b=0;
    
    
    
    
    		personentyp p[5];
    
    
    
    
    					for(i=0;i<=4;i++) {
    
    
    
    
    					printf("Mitarbeiternummer: %d",b+1);
    					p[i].mnr=b+1;
    					printf("\nName: ");
    					gets (p[i].name);
    					if (strlen(p[i].name)==0) break;
    					printf("Telefon: ");
    					gets (p[i].tel);
    
    
    					anz++;
    					b++;
    
    
    					}
    
    
    
    
    
    
    					for (i=0;i<=4;i++){
    
    
    					printf ("\n\nNummer: %d",p[i].mnr);
    					printf ("\n\nName: %s",p[i].name);
    					printf ("\n\nTelefon: %s",p[i].tel);
    
    
    					}
    
    
    }
    Alles anzeigen

    In dem Programm hab ich dann versucht einen Pointer einzubauen.


    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[30];
    		char tel[30];
    
    
    };
    
    
    void main()
    {
    
    
    		int anz=1;
    		int i=0;
    		int b=0;
    
    
    
    
    		personentyp p[5];
    
    
    		int *ptr=p;
    
    
    					for(i=0;i<=4;i++){
    
    
    
    
    					printf("Mitarbeiternummer: %d",b+1);
    					*ptr.mnr=b+1;
    					printf("\nName: ");
    					gets (*ptr.name);
    					if (strlen(*ptr.name)==0) break;
    					printf("Telefon: ");
    					gets (*ptr.tel);
    
    
    					anz++;
    					b++;
    
    
                   ptr++;
    
    
    					}
    
    
    
    
    
    
    					for (i=0;i<=4;i++){
    
    
    					printf ("\n\nNummer: %d",*ptr.mnr);
    					printf ("\n\nName: %s",*ptr.name);
    					printf ("\n\nTelefon: %s",*ptr.tel);
    
    
    					}
    
    
    }
    Alles anzeigen

    Hätte mich auch gewundert, wenn das so funktionieren würde.
    Kann mir vielleicht jemande helfen?
    Oder mir zumindest kurz erklären wie ich Strukturen und Pointer zusammen arbeiten?

    Danke!

    Synox

  • Ubik
    Punkte
    205
    Beiträge
    39
    • 11. April 2005 um 10:16
    • #2

    Mit int *ptr=p holst du dir einen int-Zeiger auf das 5-elementige Array von Strukturen.
    Du brauchst aber einen Zeiger vom Typ personentyp.
    Wenn du stattdessen personentyp *ptr=&p[i] schreibst und das ganze in die for-Schleife ziehst, sollte es klappen. Damit holst du dir (in jedem Durchlauf) einen Zeiger auf die gewünschte Struktur im Array.

    Anm.: p ist selbst ein Zeiger auf das Array

  • Dimitrij
    Punkte
    437
    Beiträge
    73
    • 11. April 2005 um 12:33
    • #3

    Das erste Programm dürfte meiner Meinung nach auch nicht funktionieren.
    Statt

    Code
    personentyp p[5];


    muss man schreiben:

    Code
    struct personentyp p[5];


    So kann man's mit Pointern machen:

    Code
    #include <stdio.h> 
    
    
     struct personentyp {
       int mnr; 
       char name[30];
       char tel[30];
     };
    
    
     void main() {
       int anz=1;
       int i=0;
       int b=0;
       struct personentyp p[5];
       for(i=0;i<=4;i++) {
    	 struct personentyp *ptr=&p[i]; //oder:  struct personentyp *ptr=p+i;
    	 printf("Mitarbeiternummer: %d",b+1);
    	 p->mnr=b+1;				 //oder: (*p).mnr=b+1;
    	 printf("\nName: ");
    	 gets (p->name);
    	 if (strlen(p->name)==0)
    	   break;
    	 printf("Telefon: ");
    	 gets (p->tel);
    	 anz++;
    	 b++;
       }
       for (i=0;i<=4;i++){
    	 struct personentyp *ptr=&p[i];
    	 printf ("\n\nNummer: %d",p->mnr); 
    	 printf ("\n\nName: %s",p->name);
    	 printf ("\n\nTelefon: %s",p->tel);
       }
     }
    Alles anzeigen
  • Synox
    Punkte
    75
    Beiträge
    10
    • 12. April 2005 um 19:19
    • #4

    Nochmal hallo zusammen!

    Danke für eure Hilfe.
    PixelPatron: Danke für deinen Code! Hab deinen Code genommen und etwas abgeändert.

    C
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <math.h>
    
    
    struct personentyp
    {
    
    
    		int mnr;
    		char name[20];
    		char tel[20];
    
    
    };
    
    
    int main()
    {
    
    
    		int anz=1;
    		int i=0;
    
    
    		int b=0;
    
    
          struct personentyp p[5], *ptr;
    		ptr = p;
    
    
    		for(i=0;i<=3;i++){
    
    
    
    
    
    
    
    
    		printf("\nMitarbeiternummer: %d",b+1);
    		p->mnr=b+1; 									//(*p).mnr=b+1;	Pointer auf mnr
    
    
    		printf("\nName: ");
    		gets(p->name);									//gets((*p).name);	Pointer auf name
    		if (strlen(p->name)==0) break;			//if (strlen((*p).name)==0) break;	Pointer auf name
    															//												zur Leerstring Erkennung
    		printf("\nTelefon: ");
    		gets(p->tel);
    
    
    		b++;
    		anz++;
    		ptr++;
    
    
    		}
    
    
    
    
    			for (i=0;i<=4;i++){
    
    
    			printf ("\n\nNummer: %d",p->mnr);
    			printf ("\n\nName: %s",p->name);
    			printf ("\n\nTelefon: %s",p->tel);
    			ptr++;
    
    
    			}
    }
    Alles anzeigen

    Funzt alles was ich brauche.

    Nochmals danke!

    bye

    Synox

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum