[Anfänger] Komme nun nicht mehr weiter...



  • Guten Abend,

    Ich hatte letztens ein Problem mit meinem Code, den ich aber dank euch wieder super lösen konnte. Deshalb hoffe ich, dass man das folgende Problem ebenfalls leicht lösen kann.

    Und zwar gehts drum, dass mein kleines Anfänger Programm, die ANZAHL Tage zwischen 2 Geburtstagen (dd/mm/jjjj) am Schluss ausgeben soll.
    (Also z.B User A hat am: 22.11.1988 Geburtstag und User B am 03.07.1999 -> Nun sollen die Anzahl TAGE zwischendrin berechnet werden)

    Hier mein bisheriger Code:

    #include <stdio.h>
    #include <windows.h>
    
    int Tag;
    int Jahr;
    int Monat;
    int Tag2;
    int Jahr2;
    int Monat2;
    int Resultat;
    char Nochmal = ' ';
    
    int main()
    {
              printf("Dieses Programm berechnet die Anzahl Tage zwischen zwei Geburtstagen!\n\n\n");
              Sleep(1000);
              printf(":::Geben Sie nun die Daten fuer den ersten Geburtstag ein:::\n\n");
              printf("-------------------------GEBURTSDATUM NR.1-------------------------\n\n");
    
     do
     {
    
              printf("Geben Sie das Jahr ein (Bsp: 1994):  ");
              scanf("%d", &Jahr);
              fflush(stdin);
              do
              { 
              printf("\nGeben Sie den Monat ein (Bsp: Fuer Januar = 1):  ");
              scanf("%d", &Monat);
              fflush(stdin);
                         if(Monat > 12 || Monat < 1)
                         {
                              printf("\nUngueltige Angabe!\n\n");
                              printf("-------------------------------------------------\n\n");      
                         }    
              } while (Monat > 12 || Monat < 1); 
              do
              {
              printf("\nGeben Sie nun noch den Tag ein:  ");
              scanf("%d", &Tag);
              fflush(stdin);
                          if(Tag > 31 || Tag < 1)
                          {
                              printf("\nUngueltige Angabe!\n\n");
                              printf("-------------------------------------------------\n\n");      
                          }    
              } while (Tag > 31 || Tag < 1); 
    
                          if (Monat == 1 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Januar %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 1 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat == 2 && Tag <= 29 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Februar %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 2 && Tag > 29 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat == 3 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Maerz %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 3 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat == 4 && Tag <= 30 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d April %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 4 && Tag >30 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          if (Monat == 5 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Mai %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 5 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat == 6 && Tag <= 30 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Juni %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 6 && Tag >30 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat == 7 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Juli %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 7 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat == 8 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d August %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 8 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
              /*---------------------------------------------------------------------------------*/
                          else if (Monat == 9 && Tag <= 30 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d September %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 9 && Tag >30 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
              /*---------------------------------------------------------------------------------*/
                          else if (Monat == 10 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Oktober %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 10 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat == 11 && Tag <= 30 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d November %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 11 && Tag >30 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat == 12 && Tag <= 31 && Tag >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Dezember %d\n\n", Tag, Jahr);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat == 12 && Tag > 31 || Tag < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
              /*---------------------------------------------------------------------------------*/
    
              Sleep(1000);
              printf("\n\n:::Geben Sie nun die Daten fuer den zweiten Geburtstag ein:::\n\n");
              printf("-------------------------GEBURTSDATUM NR.2-------------------------\n\n");
    
              printf("Geben Sie das Jahr ein (Bsp: 1994):  ");
              scanf("%d", &Jahr2);
              fflush(stdin);
              do
              {
              printf("\nGeben Sie den Monat ein (Bsp: Fuer Januar = 1):  ");
              scanf("%d", &Monat2);
              fflush(stdin);
                         if(Monat2 > 12 || Monat2 < 1)
                         {
                              printf("\nUngueltige Angabe!\n\n");
                              printf("-------------------------------------------------\n\n");      
                         }    
              } while (Monat2 > 12 || Monat2 < 1);
              do
              {
              printf("\nGeben Sie nun noch den Tag ein:  ");
              scanf("%d", &Tag2);
              fflush(stdin);
                          if(Tag2 > 31 || Tag2 < 1)
                          {
                              printf("\nUngueltige Angabe!\n\n");
                              printf("-------------------------------------------------\n\n");      
                          }    
              } while (Tag2 > 31 || Tag2 < 1); 
    
                          if (Monat2 == 1 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Januar %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 1 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 2 && Tag2 <= 29 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Februar %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 2 && Tag2 > 29 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 3 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Maerz %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 3 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 4 && Tag2 <= 30 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d April %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 4 && Tag2 >30 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          if (Monat2 == 5 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Mai %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 5 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 6 && Tag2 <= 30 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Juni %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 6 && Tag2 >30 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
                /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 7 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Juli %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 7 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 8 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d August %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 8 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
              /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 9 && Tag2 <= 30 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d September %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 9 && Tag2 >30 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
              /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 10 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Oktober %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 10 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 11 && Tag2 <= 30 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d November %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 11 && Tag2 >30 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
    
               /*---------------------------------------------------------------------------------*/
                          else if (Monat2 == 12 && Tag2 <= 31 && Tag2 >= 1)
                          {
                             printf("-------------------------------------------------");
                             printf("\nDas erste Geburtsdatum ist der %d Dezember %d\n\n", Tag2, Jahr2);
                             printf("-------------------------------------------------");
                          }
                          else if (Monat2 == 12 && Tag2 > 31 || Tag2 < 1)
                          {
                             printf("\nUngueltige Angabe!\n");
                          }
               /*---------------------------------------------------------------------------------*/
    
                          if (Jahr > Jahr2)
                          {
                             Resultat = (Jahr - Jahr2);
                          }
                          else if (Jahr < Jahr2)
                          {
                             Resultat = (Jahr2 - Jahr);
                          }       
    
                          Resultat = (Resultat * 365);
    
                          printf("\n%d Tage", Resultat); //Gibt mir Leider nur die Tage zwischen den Jahren...  
    
           printf("\n\nWollen Sie eine neue Berechnung durchfuehren? <J/N>-: :-\b\b\b");
           scanf("%c", &Nochmal);
           fflush(stdin);
           printf("\n\n");
     }     while (Nochmal == 'J' || Nochmal == 'j');
    
        printf("-------------------------------------------------");
        printf("\n");
    
        system("PAUSE");
        return 0;
    }
    

    Ist etwas lang, aber im Prinzip einfach zu verstehen. Leider etwas umständlich auch, aber ich bin ja erst noch am Anfang vom Proggen, deshalb kenn ich auch nicht all die Kniffe etc.

    Unter der Zeile 390 müsste ich jetzt noch irgendwie die Monatstage und die Tage zwischendrin selbst vom Resultat subtrahieren, doch ich peil nicht - wie ich es anstellen soll... 😞 Ich hoffe ihr könnt mir behilflich sein.

    MfG eMi



  • sind da im time.h header keine funktionen die du brauchen kannst?



  • ?hm? schrieb:

    sind da im time.h header keine funktionen die du brauchen kannst?

    Hmm kannte ich gar nicht, doch

    1. Wie soll ich das verwenden können und vor allem jetzt in diesem Code

    2. Es müsste auch ohne diesen Präprozessor gehen

    Dennoch danke für den Tipp!


  • Mod

    eMaNu3L schrieb:

    1. Wie soll ich das verwenden können und vor allem jetzt in diesem Code

    Indem du dein Programm noch einmal neu planst unter Berücksichtigung, dass du diese Funktionen benutzen kannst.

    2. Es müsste auch ohne diesen Präprozessor gehen

    😕 Wovon redest du?



  • Wenn ich mich recht erinnere, hast die die fehlende || Klammerung bereits genannt bekommen, aber immer noch nicht korrigiert.



  • SeppJ schrieb:

    eMaNu3L schrieb:

    1. Wie soll ich das verwenden können und vor allem jetzt in diesem Code

    Indem du dein Programm noch einmal neu planst unter Berücksichtigung, dass du diese Funktionen benutzen kannst.

    und vor allem, indem du versuchst, so weit wie möglich zu verhindern, den gleichen Code mehrmals zu schreiben. Ich hab dir für deine Monaten-EIngabe bereits einen sehr kompakten Code gegeben, der nicht schwer zu verstehen ist, wenn man sich 5 Minuten dafür nimmt. Wenn du etwas dran nicht verstehst, dann frag.

    Das Problem mit dem mehrfachen gelichen Zeilen führt früh oder später zu ungewollten Fehlern. Wenn du irgendwann merkst, dann du z.b. in den if-Anfragen einen Fehler hattest, dann musst du bei dir 12 Mal!!! ändern. Wenn die Zeilen sich nur wenig ändern, oder nur ein Parameter sich ändert, wie z.b. den Monatsnamen, dann lagere den Code in Fubktionen aus und ruft die Funktionen aus. So wie du jetzt programmierst, ist wie mit dem Auto gegen die Wand zu fahren. Und sag nicht nochmal "Ja, aber ich bin Anfänger", denn deshalb sag ich dir, damit du dir Gedanken machst. Der Fahrlerer lässt seinen Schüler/Schülerin nicht gegen die Wand fahren sondern schreitet ein, dasselbe mache ich.

    Damit du den Thread nicht nochmal suchst, kopiere ich dir den Code

    struct monat { 
      const char *name; 
      int max_days; 
    }; 
    
    int main(void) 
    { 
        /* warum diese Variable global deklarieren????????? */ 
        int Tag; 
        int Jahr; 
        int Monat; 
        char Nochmal = ' '; 
    
        struct monat m_db[] = { 
            {"Januar", 31}, 
            {"Februar", 29}, 
            {"März", 31}, 
            // ... den rest kannst du selber schreiben 
        }; 
    
    ... 
    
        printf("Geben Sie das Jahr ein (Bsp: 1994):  "); 
        scanf("%d", &Jahr); 
        printf("\nGeben Sie den Monat ein (Bsp: Fuer Januar = 1):  "); 
        scanf("%d", &Monat); 
        printf("\nGeben Sie nun noch den Tag ein:  "); 
        scanf("%d", &Tag); 
    
        if(Monat < 1 || Monat > 12 || Tag < 1 || Tag > m_db[Monat-1].max_days) 
            printf("\nUngueltige Angabe!\n"); 
        else { 
            printf("-------------------------------------------------"); 
            printf("\nDas erste Geburtsdatum ist der %d %s %d\n\n", Tag, m_db[Monat-1].name, Jahr); 
            printf("-------------------------------------------------"); 
        } 
    
    ... 
    
        return 0; 
    }
    

    Hör auf mit deinen alten Programm weiter zu entwickeln, das wird zu nichts führen.


Anmelden zum Antworten