我正在尝试构建一个程序,该程序在某些天后返回日期。 即使我的代码没有任何错误,但是在运行它时,由于某些原因我很难弄清输出日期,所以输出日期略有偏离。 您能帮我解决代码吗?
例如)输入:
#include <iostream>
using namespace std;
int main() {
//declare variables
int y,m,d;
int yoon=0;//assume to be normal year at first
//take user input
cin>>y>>m>>d;
//separate leap year & normal year (leap year: 1 , normal year = 0)
if (y % 4 ==0){
yoon = 1;
if (y % 100 ==0) {
yoon = 0;
if (y % 400 == 0){
yoon= 1;
}
}
}
//iterate for 100, 200, 300 days
for (int x=100;x<=300;x+=100) {
//add days to the given date
d+=100;
//iterate untill there is no day overflow
while(true)
{
//check the number of days in given month and subtract if it overflows
if ((m == 4 || m==6 || m==9 || m==11) && d>30)
{
d-=30;
m++;
}
//different days for leap year
else if (m==2 && d>29 && yoon ==1)
{
d-=29;
m++;
}
//different days for normal year
else if (m==2 && d>28 && yoon ==0)
{
d-=28;
m++;
}
else if (d>31)
{
d-=31;
m++;
//check for leap year if the year changes
if (m==13){
m=1;
y+=1;
if (y % 4 ==0){
yoon = 1;
if (y % 100 ==0) {
yoon = 0;
if (y % 400 == 0){
yoon= 1;
}
}
}
}
}
else
{
break;
}
}
//output
cout<<x<<":"<<" "<<y<<" ";
if (m>0 && m<10){cout<<0;}
cout<<m<<" ";
if (d>0 && d<10){cout<<0;}
cout<<d<<endl;
}
return 0;
}
应返回:
fgets
但不是。...
谢谢。
scanf
答案 0 :(得分:1)
尽管您的代码还有很多改进的余地,但它确实可以按预期工作。您可以通过输入来声明:
2018
1
1
您期望输出为:
100: 2018 04 10
200: 2018 07 19
300: 2018 10 27
但是输出是:
100: 2018 04 11
200: 2018 07 20
300: 2018 10 28
这是正确的,因为您输入1作为日期,然后每次在循环中添加100。因此,您的代码将返回101、201和301天。
关于为什么在输出中看不到的原因,所有计算都使用d
完成,但是输出使用x
作为标签,为 100 ,分别为200和300。