1
現在、ユーザーが入力した日に7日を追加する日付計算プログラムを作成しています。それは、カスタム関数のデータを渡す必要があります。しかし のコードをnewDateの下で実行すると、常に0/7/0になります。問題は私のカスタム関数であると確信していますが、どこに問題があるのかわかりません。私はプログラミングに慣れていないので、どんな助けでも大歓迎です。ありがとう!ユーザーが入力した日付を7日追加する日付計算プログラム
#include <time.h>
#include <stdio.h>
struct date {
int month;
int day;
int year;
};
struct date addSeven(struct date addSev) {
addSev.day += 7;
// Months with 31 days
if ((addSev.month == 1 || // January
addSev.month == 3 || // March
addSev.month == 5 || // May
addSev.month == 7 || // July
addSev.month == 8 || // August
addSev.month == 10 || // October
addSev.month == 12) // December
&& addSev.day > 31) {
addSev.day -= 31; // Equivalent to addSev.day = addSev.day - 31;
addSev.month += 1;
}
// Months with 30 days
else if ((addSev.month == 4 || // April
addSev.month == 6 || // June
addSev.month == 9 || // September
addSev.month == 11) // November
&& addSev.day > 30) {
addSev.day -= 30;
addSev.month += 1;
}
// February
else {
if (addSev.year % 4 == 0 && addSev.day > 29) { // Leap year
addSev.day -= 29;
addSev.month += 1;
}
else if (addSev.day > 28) {
addSev.day -= 28;
addSev.month += 1;
}
}
if ((addSev.day == 25)
&& addSev.day > 31) {
addSev.day -= 31; // Equivalent to addSev.day = addSev.day - 31;
addSev.month += 1;
}
else if ((addSev.day == 24)
&& addSev.day > 30) {
addSev.day -= 30;
addSev.month += 1;
}
else {
if (addSev.year % 4 == 0 && addSev.day > 29) { // Leap year
addSev.day -= 29;
addSev.month += 1;
}
else if (addSev.day > 28) {
addSev.day -= 28;
addSev.month += 1;
}
if (addSev.month > 12) {
addSev.month = 1; addSev.year += 1;
}
return addSev;
}
}
int main() {
struct date origDate, newDate;
newDate = addSeven (origDate);
printf("Please enter a date in mm/dd/yyyy format: ");
scanf("%d/%d/%d",&origDate.month,&origDate.day,&origDate.year);
printf("\n%d/%d/%d\n", origDate);
printf("\n%d/%d/%d\n", newDate);
return 0;
}
'2月の else {'部分には 'addSev.month == 2'の条件がありません。 – chux
日付を入力した後、 'newDate = addSeven(origDate);'を実行します。 'printf(" \ n%d /%d /%d \ n "、origDate);' 'origDate'の各メンバが必要です。 – BLUEPIXY
あなたのユーザが注意を払っていて、日付として '2017/09/07'1を入力していないことを確認しますか?実際、日付として '2017-09-07'を入力していないことをどこで確認していますか?入力の検証は難しいです。 –