Ich arbeite mit einem Programm, das ein eingegebenes Datum aktualisiert und aktualisiert. Unter Berücksichtigung Tage im Monat und ob es sich um ein Schaltjahr usw.Habe ich in der Funktion updateDate Zeiger richtig verwendet?
Ich bin eine Übung in den Zeiger Kapitel ‚Programmieren in C‘ Versuch:
„die Definition eines date
Struktur Da gemäß der Definition Schreiben Sie in diesem Kapitel eine Funktion namens dateUpdate()
, die einen Zeiger auf eine date
Struktur als Argument verwendet und die Struktur auf den nächsten Tag aktualisiert (siehe Programm 8.4). "
Können Sie mir bitte sagen, ob ich getan habe, was gefragt wurde?
Dies ist der ursprüngliche Code:
#include <stdio.h>
#include <stdbool.h>
struct date
{
int month;
int day;
int year;
};
struct date dateUpdate (struct date today);
int numberOfDays (struct date d);
bool isLeapYear(struct date d);
int main (void)
{
struct date thisDay, nextDay;
printf("Enter today's date (mm dd yyyy) : ");
scanf("%i%i%i", &thisDay.month, &thisDay.day, &thisDay.year);
nextDay = dateUpdate(thisDay);
printf("Tomorrow's date is %i/%i/%.2i.\n", nextDay.month, nextDay.day, nextDay.year % 100);
return 0;
}
struct date dateUpdate (struct date today)
{
struct date tomorrow;
int numberOfDays (struct date d);
if(today.day != numberOfDays (today))
{
tomorrow = (struct date) {today.month, today.day + 1, today.year};
}
else if(today.month == 12)
{
tomorrow = (struct date) {1, 1, today.year + 1};
}
else
{
tomorrow = (struct date) {today.month + 1, 1, today.year};
}
return tomorrow;
}
int numberOfDays (struct date d)
{
int days;
bool isLeapYear (struct date d);
const int daysPerMonth[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(isLeapYear (d) && d.month == 2)
{
days = 29;
}
else
{
days = daysPerMonth[d.month - 1];
}
return days;
}
bool isLeapYear(struct date d)
{
bool leapYearFlag;
if ((d.year % 4 == 0 && d.year % d.year % 100 != 0) || d.year % 400 == 0)
{
leapYearFlag = true;
}
else
{
leapYearFlag = false;
}
return leapYearFlag;
}
Und hier ist mein Versuch, Zeiger in der updateFunction
zu nutzen:
#include <stdio.h>
#include <stdbool.h>
struct date
{
int month;
int day;
int year;
};
struct date dateUpdate (struct date* today);
int numberOfDays (struct date d);
bool isLeapYear(struct date d);
int main (void)
{
struct date thisDay, nextDay, *datePtr;
printf("Enter today's date (mm dd yyyy) : ");
scanf("%i%i%i", &thisDay.month, &thisDay.day, &thisDay.year);
datePtr = &thisDay;
nextDay = dateUpdate(datePtr);
printf("Tomorrow's date is %i/%i/%.2i.\n", nextDay.month, nextDay.day, nextDay.year % 100);
return 0;
}
struct date dateUpdate (struct date* today)
{
struct date tomorrow;
int numberOfDays (struct date d);
if(today->day != numberOfDays (*today))
{
tomorrow = (struct date) {today->month, today->day + 1, today->year};
}
else if(today->month == 12)
{
tomorrow = (struct date) {1, 1, today->year + 1};
}
else
{
tomorrow = (struct date) {today->month + 1, 1, today->year};
}
return tomorrow;
}
int numberOfDays (struct date d)
{
int days;
bool isLeapYear (struct date d);
const int daysPerMonth[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(isLeapYear (d) && d.month == 2)
{
days = 29;
}
else
{
days = daysPerMonth[d.month - 1];
}
return days;
}
bool isLeapYear(struct date d)
{
bool leapYearFlag;
if ((d.year % 4 == 0 && d.year % d.year % 100 != 0) || d.year % 400 == 0)
{
leapYearFlag = true;
}
else
{
leapYearFlag = false;
}
return leapYearFlag;
}
Gerade jetzt beide Programme kompilieren und scheinen richtig zu laufen.
Ich verstehe Ihre Frage nicht vollständig.Aber um einen Zeiger auf die Struktur zu machen, würden Sie struct Daten * morgen machen; Und überall, wo Sie den Punktoperator haben, machen Sie es einfach in den Pfeiloperator ->. Beispiel: Anstatt morgen zu haben. Tag mach es morgen-> Tag; –
Meine Schuld, lassen Sie mich diesen Autounfall einer Frage umschreiben. – gloopit
Haben Sie es versucht? –