Ein C-Programm um zu überprüfen, ob das eingegebene Datum gültig ist oder nicht
Wurde ich gebeten, zu Recht, ein Programm, das prüft, ob das Datum durch den Benutzer eingegeben ist, legitim oder nicht in C. ich habe versucht, es zu schreiben, aber ich denke, die Logik ist nicht richtig.
//Legitimate date
#include <stdio.h>
void main()
{
int d,m,y,leap;
int legit = 0;
printf("Enter the date\n");
scanf("%i.%i.%i",&d,&m,&y);
if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0))
{leap=1;}
if (m<13)
{
if (m == 1 || (3 || ( 5 || ( 7 || ( 8 || ( 10 || ( 12 )))))))
{if (d <=31)
{legit=1;}}
else if (m == 4 || ( 6 || ( 9 || ( 11 ) ) ) )
{if (d <= 30)
{legit = 1;}}
else
{
if (leap == 1)
{if (d <= 29)
{legit = 1;}}
if (leap == 0)
{{if (d <= 28)
legit = 1;}}
}
}
if (legit==1)
printf("It is a legitimate date!\n");
else
printf("It's not a legitimate date!");
}
Bekomme ich die richtige Ausgabe, wenn der Monat hat 31 Tage, aber für den rest der Monate, die Ausgabe ist legitim, wenn der Tag weniger als 32. Deine Hilfe ist gefragt!
leap
ist nicht initialisiert. Aktivieren Sie Warnungen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht-chain-Bedingungen wie diese:
Stattdessen müssen Sie den test jedes Szenario speziell:
Ihre version einfach ORs die Ergebnisse des ersten Tests (
m == 1
) mit dem Wert von3
, was in C ist ungleich null und daher immer ein boolescher Wert true.ich umschreiben Sie das Programm so simpel und einfach, ich denke, dies kann helfen,
Dieser test ist sicherlich falsch:
Diese muss
Durchführen einer logischen oder mit einer nicht-null-Ausdruck wird immer zu true ausgewertet. Daher, Ihre gesamte test wird immer wahr sein.
Können Sie überprüfen, Datum Legitimität einfacher:
mktime()
macht einentime_t
ausstruct tm*
. Wenntime_t
haben falsche Daten, dannlocaltime()
zurückstruct tm*
welche Felder unterscheiden sich von der ursprünglichenstruct tm*
(time_
).