dickes problem langsam!



  • Hallo,

    Ich hab die frage schonmal gestellt.. doch irgendwie kein plan ....
    Ich versteh nicht wie man das unten in Worten ffassen solll!

    if ( current == NULL )
       {
    	new->last = NULL; // wie kann man das in worte fassen
       else
       {
    	new->last = current; // Zeiger new zeigt auf zeiger last ?
       }
       current = new; Zeiger current ist gleich Zeiger new?
    

    Hab mal das ganze Programm rein gestellt damit die übersicht klar ist...

    #include <stdio.h>
    #define MAX 50
    
    struct Person {
    
       char name[MAX];
       int alter;
       float gehalt;
       struct Person *last;
    
    } user;
    
    struct Person *current = NULL;
    struct Person *new = NULL;
    struct Person *new_current = NULL;
    
    int eingabe;
    
    int user_menue() {
    
       while(1)
          {
             printf("\n:::Menue:::");
             printf("\n:1: Eingabe");
             printf("\n:2: Ausgabe");
             printf("\n:0:Programm verlassen");
    
             printf("\n\nEingabe");scanf("%i",&eingabe);fflush(stdin);
    
             if (eingabe < 0 || eingabe > 2 )
                {
                   printf("\nUngueltige eingabe");
                   printf("\nEingabe kontrolieren");
                   printf("\n<ENTER>\n");
                   fflush(stdin); getc(stdin);
                }
             else
                {
                   return eingabe;
                }
          }
    }
    
    int input() {
    
       int anzahl;
       int cur_anzahl;
    
       printf("Wieviele Elementen ins Stack einlesen?\n");
       fflush(stdin); scanf("%i",&anzahl);
    
       new = (struct Person *) malloc ( sizeof( struct Person));
    
       if ( new == NULL)
       {
       printf("K E I N - F R E I E R S P E I C H E R");
       }
    
       for( cur_anzahl = 0; cur_anzahl <= anzahl; cur_anzahl++ )
          {
             printf("\nNAME.............:\n");
             fflush(stdin);
             scanf("%s", user.name);
    
             printf("\nALTER............:\n");
             fflush(stdin);
             scanf("%i",&user.alter);
    
             printf("\nGEHALT...........:\n");
             fflush(stdin);
             scanf("%f",&user.gehalt);
          }
    
       strcpy( new->name);
       new->alter;
       new->gehalt;
    
       if ( current == NULL )
       {
    	new->last = NULL; // wie kann man das in worte fassen
       }
       else
       {
    	new->last = current;
       }
       current = new;
    
       return 1;
    }
    
    int output() {
    
    while(1)
    {
       printf("\nNAME...........:%s",user.name);
       printf("\nALTER..........:%i",user.alter);
       printf("\nGehalt...........:%f",user.gehalt);
    
       free(current);
    }
       return 1;
    }
    
    int main() {
    
       while(1)
          {
             switch( user_menue() )
                {
                   case 1:
                      printf("\nE I N G A B E\n");
                      input();
                      break;
    
                   case 2:
                      printf("\nA U S G A B E\n");
                      output();
                      break;
    
                   case 0:
                      printf("\nP R O G R A M M - B E E N D E T!\n");
                      return 0;
                }
          }
    }
    


  • Kann man sagen .. zeiger last vom typ struct person verweist auf die adresse des Letzten Elements?



  • hassun schrieb:

    if ( current == NULL )
       {
    	new->last = NULL; // wie kann man das in worte fassen
       else
       {
    	new->last = current; // Zeiger new zeigt auf zeiger last ?
       }
       current = new; Zeiger current ist gleich Zeiger new?
    

    der ganze if-zweig ist völlig unnötig.

    new->last = current;
    current = new;
    

    tut das gleiche.

    der rest von deinem programm ist allerdings noch viel merkwürdiger.



  • ...und das ganze ding nennt sich übrigens "(einfach vorwärts) verkettete liste".



  • validat0r schrieb:

    hassun schrieb:

    if ( current == NULL )
       {
    	new->last = NULL; // wie kann man das in worte fassen
       else
       {
    	new->last = current; // Zeiger new zeigt auf zeiger last ?
       }
       current = new; Zeiger current ist gleich Zeiger new?
    

    der ganze if-zweig ist völlig unnötig.

    new->last = current;
    current = new;
    

    tut das gleiche.

    der rest von deinem programm ist allerdings noch viel merkwürdiger.

    new->last = current;
    current = new;
    

    WAS TUT DENN DAS!? dieser new -> last

    Das war die frage..
    Erklärs bitte mit adresse usw.



  • hasssun schrieb:

    new->last = current;
    current = new;
    

    WAS TUT DENN DAS!? dieser new -> last

    Das war die frage..
    Erklärs bitte mit adresse usw.

    das ist eine zuweisung, und die macht dass in new->last das gleiche drinne steht wie in current.
    das hat dir doch schon der lehrer erklärt. mal wieder nicht aufgepasst und im unterricht lieber am handy rumgespielt, hm?



  • verdammt hasso, lerne endlich unsere Beiträge zu lesen und keine 100 Thrads für ein und dasselbe Problem zu erstellen. Siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-212629-and-highlight-is-.html



  • Die Output Funktion sieht ja interessant aus. Ich frag mich, was die macht.



  • feigling schrieb:

    Die Output Funktion sieht ja interessant aus. Ich frag mich, was die macht.

    Lauter Nullen ausgeben natürlich!


Anmelden zum Antworten