【发布时间】:2014-08-08 02:35:28
【问题描述】:
我想给一个日期加上 x 天。 有人可以帮助我的逻辑,尤其是在特定日期添加 x 天。 它似乎在添加的天数很少,但如果我添加大量天数,它就会开始给出非常有趣的答案。
也请不要函数,只是逻辑。
int
main(int argc, char *argv[]) {
int dd, mm, yyyy, daysthismonth, days, option;
printf("Please enter a date in the following format: dd/mm/yyyy:\n");
if(scanf("%d/%d/%d",&dd,&mm,&yyyy)!= 3){
printf("Please enter a valid date\n");
exit(EXIT_FAILURE);
/* Calculating days in a month */
}
if((mm == 4)|| (mm == 6) || (mm == 9) || (mm == 11)){
daysthismonth = 30;
}
else if((mm == 2)){
if((yyyy%4 == 0) && ( (yyyy%100 == 0) || (yyyy%400 == 0))){
daysthismonth = 29;
}
else{
daysthismonth = 28;
}
}
else {
daysthismonth = 31;
}
/* Calculating the validity of User Input */
if( (dd<0) || (dd>daysthismonth) || (mm<0) || (mm>12) || (yyyy < 0) || (yyyy>9999) ){
printf("Plase enter a valid date between from a day from 0 AD to 9999 AD\n.");
}
printf("Todays date: %02d/%02d/%04d\n"
"How many days would you like to go in the future? \n",dd,mm,yyyy);
if(scanf("%d",&days) != 1){
printf("Please enter a valid input\n");
}
printf("The date %d days in the future is:\n",days);
while(days > (daysthismonth - dd)){
mm = mm + 1;
days = days - (daysthismonth - dd);
if( days < daysthismonth){
dd = days;
}
if( mm>12){
mm = 1;
yyyy = yyyy + 1;
}
}
dd = dd + days;
}
printf(" %02d/%02d/%04d\n",dd,mm,yyyy);
exit(EXIT_SUCCESS);
}
我想我的逻辑是,如果您添加了大量天数,它将减去下个月的天数,直到您达到要添加的天数少于该月天数的地步。届时,日期可能就是您必须添加的日期。
这就是为什么我实施了一段时间?循环,以便它可以重复
已编辑:scanf() != 1
【问题讨论】:
-
请修正格式。
-
为什么要执行一些计算然后验证用户输入?验证应该是第一位的。无论结果如何,您都使用输入。
-
没有功能?创建它们是为了在 C 中组织一个人的想法!
-
根本不理解您的
while循环。那里肯定有一些错误。 -
@pyrons:用铅笔和一张纸来做,你就会发现问题所在。学习编程的最好方法是从学习如何成为一台计算机开始:)