2012-12-09 51 views
1

我爲了測試目的而製作了一個程序,當您從2012年1月1日起每天在鍵盤上按住鍵「p」鍵時,它應該繼續2013年,儘管它到2013年1月32日,這是一個錯誤,我不知道如何解決,我一直在嘗試解決這個問題幾個小時,現在沒有什麼似乎使它工作,因爲它應該..(應到2013年2月1月1日的31日之後)基本日曆程序出錯 - 標準C

這裏是我的代碼:

#include <stdio.h> 
#include <stdlib.h> 


int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; 

int day = 0; 
int year = 2012; 

char *months[]= 
{ 
    " ", 
    " January ", 
    " February ", 
    " March ", 
    " April ", 
    " May ", 
    " June ", 
    " July ", 
    " August ", 
    " September ", 
    " October ", 
    " November ", 
    " December " 
}; 


int x = 1; //skip the blank element 0, get to January (element 1) 

int main() 
{ 

while(1) 
{ 
    char ch; 
    ch = getch(); //in_char(); 

    if(ch == 'p') 
    { 
     day++; 


     if(day == month[x]+1) 
     { 
      day = 1; //day is equal to the first day of the new month 
      month[x]++; //month data increments 
      months[x]++; //month display increments 
      x++; //element of month array increments to get the data of the next month 


      if(year % 4 == 0) //leapyear 
      { 
       month[2] = 29; 
      } 
      else 
      { 
       month[2] = 28; 
      } 


      if(x == 13) //if 12 months have passed 
      { 
       year++; //year increments 
       day = 1; //initialize day to be day 1 of the next year 
       x = 1; //go back to the 'January' element in the array 

       if(day == month[x]) //if day is equal to the first month (January) 31 days 
       { 
        day = 1; 
        month[x]++; //month data increments 
        months[x]++; //month display increments 
       } 
      } 
     } 
     if(year == 9999) 
     { 
      year = 1; 
     } 


     printf("%i%s%04i\n",day,months[x],year); 
    } 
} 


return 0; 
} 

輸出:

. 
. 
. 
28 December 2012 
29 December 2012 
30 December 2012 
31 December 2012 
1January 2013 
2January 2013 
3January 2013 
4January 2013 
5January 2013 
6January 2013 
7January 2013 
8January 2013 
9January 2013 
10January 2013 
11January 2013 
12January 2013 
13January 2013 
14January 2013 
15January 2013 
16January 2013 
17January 2013 
18January 2013 
19January 2013 
20January 2013 
21January 2013 
22January 2013 
23January 2013 
24January 2013 
25January 2013 
26January 2013 
27January 2013 
28January 2013 
29January 2013 
30January 2013 
31January 2013 
**32January 2013** 
1February 2013 
2February 2013 
. 
. 
. 

回答

2

的問題是在這裏:做month[x]++

if(day == month[x]+1) 
    { 
     day = 1; // reset date...OKAY 
     month[x]++; // NOT OKAY 

你增加允許在一個月的天數。相反,您需要保留一個變量來跟蹤月份,就像您在日間和年份所做的一樣。

+0

並且還刪除「months [x] ++; //月份顯示增量」。沒有必要增加月份名稱 – eyalm

+0

啊是的,我明白了,非常感謝您向我指出這一點,它現在起作用。感謝你的幫助! – Conor