c - While 循环在 C 日历程序中无法正常工作?

标签 c while-loop

我的代码的目标是能够让用户输入一个整数值 (delta),而 delta 是代码将执行的天数。显示从现在开始的日期。例如今天的日期是 2015 年 9 月 24 日,如果用户输入 10 作为 delta,计算机将输出新日期 2015 年 10 月 4 日。我知道可以使用 time.h 标准库,但我试图在不使用这些函数的情况下完成这一部分,我想真正了解基础知识。我在 while 循环方面遇到了麻烦,我可以更改天数,但更改月份/年份对我来说不起作用。我在下面输入了当前代码的这一部分。我是 C 语言新手,所以任何帮助将不胜感激。谢谢

#include <stdio.h>
#include <time.h>
#include <assert.h>
#include <stdbool.h>

int domToday();
int monthToday();
int yeartoday();
int calcDays();

void printDate(int year, int month, int dom);

struct tm *now;
time_t timer;

int numberOfDays;

int main(int argc, char **argv) {

int delta = 0;

if (argc!=2) {
    printf("Expect a single argument... number of days from today.\n");
    printf("Assuming today's date (delta=0)\n");
    printf("Enter the number of days\n"); // change later
    scanf("%i", &delta);
} else delta=atoi(argv[1]);

int year=yearToday();
int month=monthToday();
int dom=domToday();


while(delta>0) {

    if (month == 12 && dom>numberOfDays) {
        ++year;
        month = 1;
        dom = 0;
        ++dom;
        --delta;
    }
    else if(dom>numberOfDays) {
        ++month;
        --delta;
        dom = 0;
        ++dom;
    }
    else {
        ++dom;
        --delta;
    }
}


printDate(year,month,dom);

}

int calcDays(month,year){
int numberOfDays;  
    if (month == 4 || month == 6 || month == 9 || month == 11)  
        numberOfDays = 30;  
    else if (month == 2)  {
        bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);  
    if (isLeapYear)  
         numberOfDays = 29;  
    else  
            numberOfDays = 28;  
    }  
    else  
        numberOfDays = 31; 
    }



int domToday() {
    timer=time(NULL);
    now = localtime(&timer);
    return now->tm_mday;
}

int monthToday() {
    timer=time(NULL);
    now = localtime(&timer);
    return now->tm_mon+1;
}

int yearToday() {
    timer=time(NULL);
    now = localtime(&timer);
    return now->tm_year+1900;
}

void printDate(int year, int month, int dom) {
    /* The following assertions make sure that the arguments are valid numbers */
    assert(year>=0);
    assert(month>0);
    assert(month<=12);
    assert(dom>0);
    assert(dom<=31);
    char* monthNames[12]={"January","February","March","April","May",
            "June","July","August","September","October","November","December"};
    printf("New date is: %s %2d, %d\n",monthNames[month-1],dom,year);
}

最佳答案

正如HappyCoder所说,while上缺少括号

您的代码:

while(delta > 0)

    if (month == 12 && dom > numberOfDays) {
        ++year;
        month = 1;
        dom = 1;
        ++dom;
        --delta;
    }

    else if(dom > numberOfDays) {
        ++month;
        --delta;
        dom = 1;
        ++dom;
    }

    else {
        ++dom;
        --delta;
    }

你应该拥有什么:

while(delta > 0) {

    if (month == 12 && dom > numberOfDays) {
        ++year;
        month = 1;
        dom = 1;
        ++dom;
        --delta;
    }

    else if(dom > numberOfDays) {
        ++month;
        --delta;
        dom = 1;
        ++dom;
    }

    else {
        ++dom;
        --delta;
    }
}

关于c - While 循环在 C 日历程序中无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32765815/

相关文章:

C 编程 - getopt

c - 如何在c中的两个程序之间共享库

在 C 中实现 tcp ping 时可配置的速率和模式

java - 在 switch 语句中使用 switch 语句是否可以接受?

java - 以下 Java 库代码如何退出 while(true) 循环?

java - Java 中的 gem 棋游戏 - 在 while 循环中使用 int 数组

c - 如何找到数组中存在的项目的长度/数量?

c++ - 从 C++ 代码中的 C 回调诊断内存损坏

java - 如何实现用户验证以仅接受少数字母有效

python - 删除重复数据并将其余数据附加到 Pandas 中