计算某个日期范围与** for ** **之间的天数? (C ++)

时间:2014-03-31 00:26:17

标签: c++ for-loop

我发现的所有其他问题都使用不同的语言,对于像我这样的初学者来说有点太复杂了。

我的代码有什么问题,我无法获得两个输入日期之间的确切天数?

int getDate()
{
    std::cout << "Begins from: i.e 7th";
    int dateStart;
    std::cin >> dateStart;

    std::cout << "Ends: i.e 22nd";
    int dateStops;
    std::cin >> dateStops;

    int nrDays = dateStart;

    for(nrDays; nrDays < dateStops; nrDays++)
    {
    }

    return nrDays;
}

这可以使用 for loop 吗?

我很抱歉提出愚蠢的问题。我刚刚开始学习C ++,很多东西对我来说还是新的。

感谢您的回答! :)

p.s另外,如果有人想提出如何排除周末的想法,那将是非常好的。虽然,我的直觉告诉我,它需要比我有能力做的更多的编码。

3 个答案:

答案 0 :(得分:2)

您必须使用单独的变量来计算天数。

尝试这个。

int getDate()
{
    std::cout << "Begins from: i.e 7th";
    int dateStart;
    std::cin >> dateStart;

    std::cout << "Ends: i.e 22nd";
    int dateStops;
    std::cin >> dateStops;

    int nrDays = dateStart;
    int daysCount=0;

    for(nrDays; nrDays < dateStops; nrDays++)
    {
           daysCount++;
    }

    return daysCount;
}

答案 1 :(得分:1)

你的循环问题在于你假设迭代变量是一个计数器。事实证明在许多循环中都是如此,但在这里它并非如此。您的变量nrDays实际上不是几天,而是一个日期(从dateStart开始并转到dateStops)。你真的想要更像这样的东西:

int nrDays = 0;

for( int date = dateStart; date < dateStops; date++)
{
    if (isWeekday(date)) nrDays++;
}

return nrDays;

请注意,您无法从该月的某一天开始检测工作日。你需要知道哪个月和哪一年,或者其他什么方式得到一周中的那一天。

答案 2 :(得分:0)

由于这一行,你的代码不应该编译:

std::cin dateStart;

应该是:

std::cin >> dateStart;

一部分,你循环是没用的。您显然希望nrDays等于dateStop - 1

int nrDays = dateStop - 1;

或更确切地说:

int nrDays = std::max(dateStop - 1, dateStart);

是:dateStartdateStop - 1之间的最大值。