brauch mal hilfe zum bubblesort



  • Hallo!

    Wie müsste ich den Vergleich zwischen geb_vgl=; und anst_vgl=; vornehmen sodass beide miteinander
    verglichen werden wie name_vgl=strcmp(angest[i].name, angest[j].name); und vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname); ?

    MfG Chris!

    #include<stdio.h>
    #include<string.h>

    #define MAX 100

    struct datum{
    int tag;
    int monat;
    int jahr;
    };

    struct person{
    char name[20];
    char vorname[20];
    struct datum dat_geb;
    struct datum dat_anst;
    }angest[MAX];

    void sortieren(int anzahl, int wahl)
    {
    int i, j;
    char name_vgl, vorname_vgl;

    for(i=0; i<anzahl-1; i++)
    {
    for(j=0;j<anzahl;j++)
    {
    name_vgl=strcmp(angest[i].name, angest[j].name);
    vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname);
    // geb_vgl=;
    // anst_vgl=;

    }
    }

    void main(void)
    {
    int i;

    for(i=0; i<MAX; i++)
    {
    printf("Eingabe der %d Person\n", i);

    printf("Name: ");
    gets(angest[i].name);

    printf("\nVorname: ");
    gets(angest[i].vorname);

    printf("\nGeburtsdatum: ");
    scanf("%d %d %d", &angest[i].dat_geb.tag, &angest[i].dat_geb.monat, &angest[i].dat_geb.jahr);

    printf("\nAngestellt seit (Datum): ");
    scanf("%d %d %d", &angest[i].dat_anst.tag, &angest[i].dat_anst.monat, &angest[i].dat_anst.jahr);

    if(strlen(angest[i].name==0))
    {
    break;
    }
    }
    }



  • Haste die Code Tags übersehen? 😃
    Zu deinem Problem, dass geht genauso.

    Fehler:
    - gets legt ein undefiniertes Verhalten an den Tag .
    - void main() ist Falsch!

    #include<stdio.h> 
    #include<string.h> 
    
    #define MAX 100 
    
    struct datum{ 
    int tag; 
    int monat; 
    int jahr; 
    }; 
    
    struct person{ 
    char name[20]; 
    char vorname[20]; 
    struct datum dat_geb; 
    struct datum dat_anst; 
    }angest[MAX]; 
    
    void sortieren(int anzahl, int wahl) 
    { 
      int i, j; 
      char name_vgl, vorname_vgl; 
    
      for(i=0; i<anzahl-1; i++) 
      { 
        for(j=0;j<anzahl;j++) 
        { 
         name_vgl=strcmp(angest[i].name, angest[j].name); 
         vorname_vgl=strcmp(angest[i].vorname, angest[j].vorname); 
    // geb_vgl=; 
    // anst_vgl=;
    strcmp(geb_vgl, anst_vgl); // Wenn geb_vgl und anst_vgl char arreys sind 
    
    if(geb_vgl==anst_vgl) // Wenn geb_vgl und anst_vgl int, char, etc. sind 
    {
    // ...
    }
        } 
      }
    } 
    
    int main() 
    { 
      int i; 
    
      for(i=0; i<MAX; i++) 
      { 
        printf("Eingabe der %d Person\n", i); 
    
        printf("Name: "); 
        gets(angest[i].name); // gets legt ein undefiniertes Verhalten an den Tag 
    
        printf("\nVorname: "); 
        gets(angest[i].vorname); // gets legt ein undefiniertes Verhalten an den Tag 
    
        printf("\nGeburtsdatum: "); 
        scanf("%d %d %d", &angest[i].dat_geb.tag, &angest[i].dat_geb.monat, &angest[i].dat_geb.jahr); 
    
        printf("\nAngestellt seit (Datum): "); 
        scanf("%d %d %d", &angest[i].dat_anst.tag, &angest[i].dat_anst.monat, &angest[i].dat_anst.jahr); 
    
        if(strlen(angest[i].name==0)) 
        { 
          break; 
        } 
      } 
      return 0;
    }
    


  • IMHO kannst du das gut machen, wenn du die "time.h" inkludierst und dann das Datum mit mktime() in eine time_t-Struktur schreibst. Geht der Aufruf schief, dann stimmt das Datum nicht wirklich. Code-Segment, was auch buggy sein kann, da nicht getestet und nur so aus dem Kopf heraus:

    #include <time.h>
    #include <stdio.h>
    
    int main(void) {
     int tag, monat, jahr;
     struct tm geb, angest;
     time_t geb_t, angest_t;
    
     // nicht einzulesende Werte mit Standardwerten belegen
     geb.tm_hour = angest.tm_hour = 0;
     geb.tm_min = angest.tm_min = 0;
     geb.tm_sec = angest.tm_sec = 1;
     geb.tm_isdst = angest.tm_isdst = -1;
    
     // Werte einlesen
     printf("Geburtsdatum (tt.mm.jjjj): "); 
     scanf("%d.%d.%d", tag, monat, jahr);
    
     angest.tm_mday = tag;  // Monatstag
     angest.tm_mon = monat - 1;  // Monat im Jahr [0,11]
     angest.tm_year = jahr - 1900;   // Jahr seit 1900
    
     printf("Angestellt seit (tt.mm.jjjj): "); 
     scanf("%d.%d.%d", tag, monat, jahr);
    
     // die Daten erstmal in die tm-structs schreiben
     angest.tm_mday = tag;  
     angest.tm_mon = monat - 1;  
     angest.tm_year = jahr - 1900;
    
     // jetzt versuchen ein gültiges Datum daraus zu bilden
     geb_t = mktime(&geb);
     if(geb_t == -1) printf("Das Geburtsdatum kenne ich nicht...\n");
    
     angest_t = mktime(&angest);
     if(angest_t == -1) printf("Das Angestelltendatum kenne ich nicht...\n");
    
     // ...
     // hier kommt noch der Vergleich hin bzw. das Sortieren...
     // ...
    
     return 0;
    }
    

    Wie gesagt: kann jetzt nicht überprüfen, ob das funktioniert, must du selber eben ein wenig rumprobieren. Die time_t-Werte (entsprechen int-Variablen)kannst du jetzt einfach miteinander vergleichen, musst halt nur noch aus geb_t und angest_t Arrays machen...

    Hoffe geholfen zu haben,
    Ciao
    RTC



  • @quizmaster

    was ist das für ein undefiniertes verhalten, was du mit gets meinst?



  • gets legt ein undefiniertes Verhalten an den Tag .
    ----
    fgets ist besser, aber umständlicher. Wenn du genau weißt was du machst kannst du auch gets nehmen. (siehe: bufferoverflow)

    void main() ist Falsch!
    -----
    void main() ist erlaubt!

    ------
    FREAK



  • Original erstellt von <FREAK>:
    void main() ist erlaubt!

    Das kannst Du sicher anhand des Standards belegen? (Hint: ein Compiler KANN void main unterstützen, muss er aber nicht)



  • void main()
    {
    }

    Nach dem älteren C89-Standard ist dies auch richtig. Das ist wirklich kleinkariert, da es fast keinen Compiler gibt der dies als Fehler ausgibt. (Abwärtskompatibel)



  • nein, das ist auch nach C89 falsch. Es war auch nach K&R falsch, da es da noch kein void gab. Es gab nie einen offiziellen oder inoffiziellen Standard, nach dem das richtig war. Das haben nur die Leute, die denken, alles was ihr Compiler kann ist richtig, nie anders gelernt. Manche von denen schreiben jetzt Bücher über das was sie für C halten ...


Anmelden zum Antworten