如何对抗强拆:程序问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/03 10:04:23
************************************************************
输入年和天数,输出对应的月和日.
分析:1、应先分出闰年与非闰年;
2、如果总天数大于当月天数,总天数减去当月天数,再与下一月天数比较;
3、当总天数小于当月天数时,输出当月及当月天数;
****************************************************/
#include <stdio.h>
int month_day(int year,int yearday,int *pmonth,int *pday);

void main()
{
int day,month,year,yearday;
printf("input year and yearday!\n");
scanf("%d%d",&year,&yearday);
month_day(year,yearday,&month,&day);
printf("%d-%d-%d\n",year,month,day);
}
int month_day(int year,int yearday,int *pmonth,int *pday)
{
int leap,k;
int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
leap=(year%4==0&&year%100!=0)||year%400==0;
for(*pmonth=1;yearday>tab[leap][*pmonth];*pmonth++)//1
yearday=yearday-tab[leap][*pmonth];//2
*pday=yearday;
//*pmonth=k; //3
return *pday;
}

以上程序,为什么我运行时,输入2006 300时会出现错误,而我把1、2处的*pmonth用t代替后,把3处定义好,程序可以正常,我怎么想都想不明白,请高手指点!!

*pmonth++ 并不是改变pmonth指向位置的值,而是把pmonth的指针地址改变了(自加一),建议好好看看指针以及运算符优先级的知识。
假设main里面month变量的地址是0x1234
那么for循环初始化时,0x1234指向的内容值被改为1,后来*pmonth++,则是将pmonth的指针指向了0x1238,不再是month的地址了。

程序可改为(*pmonth)++