计算两个日期的天数 C语言 哪里错了
你好!!
你的程序思路,都是对的,就是有些细节的地方不对:
改动一:
scanf(“%d %d %d”,a,b,c); // 这里都改成 %d %d %d ,去掉 \n 回车符
scanf(“%d %d %d”,d,e,f);
改动二:
else if (a==d-1) // 这里的 elseif 中间是有空格的改成 else if
else if(a==d) // 这里的 elseif 中间是有空格的改成 else if
完整的代码,程序是在你代码上面直接修改的:
#include stdio.h
int leap_year( int );
int year_days( int );
int days(int,int,int);
int leap_year( int year )
{
return ( (year%4==0 year%100!=0) || year%400==0 ) ? 1 : 0;
}
int year_days(int year)
{
return leap_year( year) ? 366 : 365;
}
int days( int year, int month, int day )
{
int months[13] ={0,31,28,31,30,31,30,31,31,30,31,30,31}, i;
if ( leap_year( year ) month 2)
day++;
for ( i=1; imonth;i++ )
day +=months[i];
return day;
}
int main()
{
int leap_year( int );
int year_days( int );
int days(int,int,int);
int a,b,c,d,e,f,m,n,w,z,i;
int y=0;
scanf(“%d %d %d”,a,b,c); // 这里都改成 %d %d %d ,去掉 \n 回车符
scanf(“%d %d %d”,d,e,f);
m=days(a,b,c);
w=year_days(a)-m;
n=days(d,e,f);
if(a(d-1))
{
for(i=a+1;id;i++)
{
y=y+year_days(i);
}
z=y+w+n;
printf(“%ddays\n”,z);
}
else if (a==d-1) // 这里的 elseif 中间是有空格的改成 else if
{
z=n+w;
printf(“%d days\n”,z);
}
else if(a==d) // 这里的 elseif 中间是有空格的改成 else if
{
z=n-m;
if(z==1)
printf(“1day\n”);
else if (z1)
printf(“%ddays\n”,z);
}
}
这个题目用c语言怎么编:编写一个程序,计算用户输入的起始时间和终止时间之间的相距天数
你把这个程序的birth都改成start就行了
其实不改也无妨
#include stdio.h
//判断是否闰年
bool IsLeapYear( int year )
{
return ( year % 400==0 || ( year %4==0 year %100 !=0 ) );
}
//获取某年中某月的天数
int GetDaysOfMonth( int year, int month )
{
int day = 31;
if ( month 12 || month 0 )
{
return 0;
}
switch ( month )
{
case 4:
case 6:
case 9:
case 11:
day=30;
break;
case 2:
day = ( IsLeapYear( year) ) ? 29 : 28;
break;
default:
break;
}
return day;
}
//计算两个日期间的天数
void FunctionFour( int birthYear, int birthMonth, int birthDay, int year, int month, int day )
{
int iResult=0;
for ( int i=birthYear; i=year; i++ )
{
iResult += ( ( IsLeapYear(i) ) ? 366 : 365);
}
for ( int i=1; ibirthMonth; i++ )
{
iResult -= GetDaysOfMonth( birthYear, i );
}
for ( int i=1; i birthDay; i++ )
{
iResult–;
}
for ( int i=month; i =12; i++ )
{
iResult -= GetDaysOfMonth( year, i );
}
for ( int i=1; i day; i++ )
{
iResult++;
}
printf(“\n%d年%d月%日-%d年%d月%d日 = %d天\n”, year, month, day, birthYear, birthMonth, birthDay );
}
int main()
{
char ch;
int year, month, day;
int birthYear, birthMonth, birthDay;
printf( “请输入你的生日(年月日, 以空格分隔):”);
scanf( “%d%d%d”, birthYear, birthMonth, day );
printf( “\n请输入计算日期(年月日, 以空格分隔):”);
scanf( “%d%d%d”, year, month, birthDay );
FunctionFour( birthYear, birthMonth, birthDay, year, month, day);
printf( “Any key to exit…”);
scanf( “%c”, ch);
return 0;
}
如何用c语言来计算日期间隔天数?
楼上的说的太麻烦了(真是傻瓜做法)//定义两个时间DateTime time1=Convert.ToDateTime(“2006-05-23”);DateTime time2=Convert.ToDateTime(“2045-12-15”);//计算间隔天数(精确到毫秒格式为“2222.22.22.2222”)TimeSpan span = (TimeSpan)(time2-time1);int result = Convert.ToInt32(Convert.ToString(span).SubString(0,Convert.ToString(span).IndexOf(“.”)));//result就是你要的天数
这是我写的c语言计算两个日期之间的天数的程序,求指教怎么错的?
抱歉,你的代码风格实在是让我看不下去。这样的代码估计过几天你自己都看不懂了。函数命名和变量命名一定要有意义,虽然不一定简洁,但可读性一定要好,这样就算错了调试也方便。我自己写了一个类似的程序,你看看是不是你想要的。上代码(这网页上的排版不会搞,你复制到自己的编译环境重新排版下吧):
#include “stdafx.h” //这里面啥也没有,就作为一个预编译头
#include stdio.h
#include stdlib.h
#include Windows.h
bool IsLeapYear(UINT uYear)
{
return (0 == uYear % 4 0 != uYear % 100) || (0 == uYear % 400);
}
UINT GetTotalDayOfMonth(UINT uYear, UINT uMonth)
{
if (uMonth 12 || uMonth 1)
{
return 0;
}
UINT uDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return uDays[uMonth – 1] + (IsLeapYear (uYear) 2 == uMonth ? 1 : 0);
}
bool IsCorrectInput(UINT uYear, UINT uMonth, UINT uDay)
{
UINT uTotalDayOfMonth = GetTotalDayOfMonth(uYear, uMonth);
return (0 != uTotalDayOfMonth uDay 0 uDay = uTotalDayOfMonth);
}
UINT GetDaysOfYear(UINT uYear, UINT uMonth, UINT uDay)
{
if (0 == uMonth 0 == uDay)
{
return IsLeapYear(uYear) ? 366 : 365;
}
UINT uResult = 0;
if (uMonth = 2 IsLeapYear(uYear))
{
++uResult;
}
while (uMonth = 12)
{
uResult += GetTotalDayOfMonth(uYear, uMonth);
++uMonth;
}
uResult -= uDay;
return uResult;
}
int main()
{
UINT uBeginYear = 0;
UINT uBeginMonth = 0;
UINT uBeginDay = 0;
do
{
printf(“请输入起始年 月 日:”);
scanf(“%u%u%u”, uBeginYear, uBeginMonth, uBeginDay);
} while (!IsCorrectInput(uBeginYear, uBeginMonth, uBeginDay));
UINT uEndYear = 0;
UINT uEndMonth = 0;
UINT uEndDay = 0;
do
{
printf(“请输入终止年 月 日:”);
scanf(“%u%u%u”, uEndYear, uEndMonth, uEndDay);
} while (!IsCorrectInput(uEndYear, uEndMonth, uEndDay));
LONG lResult = 0;
UINT uSmallYear = min(uBeginYear, uEndYear);
UINT uBigYear = max(uBeginYear, uEndYear);
while (uSmallYear != uBigYear)
{
lResult += (GetDaysOfYear(uSmallYear, 0, 0));
++uSmallYear;
}
if (uBeginYear uEndYear)
{
lResult *= -1;
}
lResult += (GetDaysOfYear(uBigYear, uBeginMonth, uBeginDay) – GetDaysOfYear(uBigYear, uEndMonth, uEndDay));
printf(“相差天数为:%d”, lResult);
system(“pause”);
return 0;
}
我刚学c语言。搜到一个计算俩个日期间的天数。可是不能运行,而且有些地方看不懂,求解释和改错。
首先这个代码可以运行,没问题。
初学者最好卖一本c plus primer自学,淘宝上就有,也可以下载电子版,这本书特别适合新手。最好不要买谭浩强的,错误是十分的多。
table[0] 和 table[month]是数组内容,具体怎么回事请看书中数组的那一章。
for(i=0;i5;i++) printf(“\n”);是循环加输出,意思是一共输出5个回车。(/n在c语言中是回车的作用,就是跳转到下一行
望采纳