用c语言完成输入一个日期,输出下一天#include stdio.h
int main(void)
{
int year, month, day;
int m[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("Input year month day:");
scanf("%d%d%d", year, month, day);
if (year % 4 == 0year % 100 != 0 || year % 400 == 0)
m[1];
(month == 12day == 31) ? year: year;
month = (monthday / m[month - 1]) % 12;
day = day % m[month - 1]1;
printf("Next day: %d年%d月%d号\n", year, month, day);
return 0;
}
大家帮忙解决一下啊分类:电脑/网络程序设计其c语言todate函数他编程语言
问题描述:
我是个C语言初学者,编c语言todate函数了一个程序,结果有13个错误和4个警告!只有50几行啊!请懂的人帮忙看一下啊,这里写不下,在我的空间里hi.baidu/tanghuipang/blog请叔叔阿姨哥哥姐姐帮忙了!
请有爱心的人挥洒你们的同情心了!
解析:
你的程序太没艺术性
int datetonum(int mouth,int num,int date);
int numtodate(int mouth,int num,int date) ;
改为
int datetonum(int mouth,int day,int *num);num设成指针 , 以便函数中修改其数值
int numtodate(int *mouth,int *day,int num) ;同理如上
1 2 3 4 5 6 7 8 9 10 11 12
int mouthday[]={31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int date,num,mouth,n;
printf("请选择:\n1.把日期转换成天数;\n2.把天数转换成日期 。\n您选的是");
scanf("%d",n);
if(n==1)
{
printf("\n请输入月份和日期:");
scanf("%d %d",mouth,date) ;添加一个空格
datetonum(mouth,date,num);取地址
printf("这是一年中的第%d天",num);
}
if(n==2)
{
printf("请输入天数:");
scanf("%d",num) ;
numtodate(mouth,date,num);取地址
printf("这天是一年中的%d月%d日",mouth,date);
}
if(n!=1n!=2)
printf("您选错了c语言todate函数!");
return 0;
}
int datetonum(int mouth,int day,int *num)num设成指针 , 以便函数中修改其数值
{
int i,m;
if(mouth12)return -1;
if(mouth1)return -1;
if(day ...
*num=0;
m=mouth-1;
for(i=0;im;i)
*num=mouthday[i];
*num=day;
return (*num);
}
int numtodate(int *mouth,int *day,int num)
{
int i;
if(num365)
{
printf("输入了一个错误的天数!\n") ;
return -1;
}
for(i=0;i12;i)
{
if(nummouthday[i])break;
num -= mouthday[i];
}
*mouth = i 1;
*day =num;
return num;
}
C语言中 有没有函数可以将字符串直接转为时间格式的?由于实际生活中,字符串形式的时间有可能有多种形式,比如月日年,或年月日,中间的分隔符也可能有所不同 。所以C语言并没有提供此类的转换函数 。
如果有需求,那么在确定字符串的组织格式前提下,可以自行书写一个转换函数 。
有两种思路:
1 传入字符串,逐位解析每个字符 , 智能检查出数字之间的分隔符 。然后根据分隔符 , 取出各个位上的数值,如年月日时分秒等 。最终赋值到时间结构的对应成员变量上 。
2 使用sscanf , 根据约定好的格式 , 构建对应的格式字符串,将数值提取到对应的变量中 。
对比二者,第一种方式代码量更大 , 但可以兼容更复杂的输入方式 , 使得输入更灵活,程序健壮性更好 。第二种方式适用于严格约定输入格式的情况,以最少的代码量实现效果 。
C计算两个日期之间的天数//历法规定,四年一闰,四百年闰,例如2000年是闰年 , 2100年不闰年,
//公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年
//计算两个日期之间的天数(C)
//定义变量year1, month1, day1, year2, month2, day2
//取出2个日期中的年 月 日
//如果年相同,月也相同
//return day1- day2
【c语言todate函数 c语言 todo】/*
问题: 两个日期(如"2010-04-13"和"1988-10-24"),求它们之间相差的天数
分析: 这是一年看似简单,实际上却有点复杂的小问题,首先你要考虑到月大月小的问题,其次你要考虑到闰年的问题
当然,你也要检测一下,给定的日期格式是否合法,对这个问题的解法,写出伪代码如下
定义变量year1, month1, day1, year2, month2, day2
取出2个日期中的 年 月 日
如果年相同,月也相同:
Return | day1 - day2
如果年相同,月不同:
D1 = date1是该年的第几天
D2 = date2是该年的第几天
Return | d1 - d2
如果年份不同:
D1 = 年份小的日期,离年低还有多少天
D2 = 年份大的日期是这年的第几天
D3 = 两个日期之间相差多少个整年,共有多少天
Return D1D2D3
上面的伪代码用户C实现如下:
*/
#include iostream
using namespace std;
//IsLeap函数判断一个年份是否为闰年,方法如下:
bool IsLeap(int year)
{
return (year % 4 ==0 || year % 400 ==0)(year % 100 !=0);
}
//上面的StringToDate函数用于取出日期中的年月日并判断日期是否合法
//从字符中最得年月日 规定日期的格式是yyyy-mm-dd
bool StringToDate(string date, int year, int month, int day)
{
year = atoi((date.substr(0,4)).c_str());
month = atoi((date.substr(5,2)).c_str());
day = atoi((date.substr(8,2)).c_str());
int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeap(year)){
DAY[1] = 29;
}
return year = 0month=12month0day=DAY[month]day0;
}
//DayInYear能根据给定的日期 , 求出它在该年的第几天,代码如下
int DayInYear(int year, int month, int day)
{
//int _day = 0;
int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeap(year))
DAY[1] = 29;
for(int i=0; imonth - 1;i)
{
day= DAY[i];
}
return day;
}
int DaysBetween2Date(string date1, string date2)
{
//取出日期中的年月日
int year1, month1, day1;
int year2, month2, day2;
if(!StringToDate(date1, year1, month1, day1) || !StringToDate(date2, year2,month2,day2))
{
cout"输入的日期格式不正确";
return -1;
}
if(year1 == year2month1 == month2)
{
return day1day2 ? day1 - day2 : day2 - day1;
//如果年相同
}else if(year1 == year2)
{
int d1, d2;
d1 = DayInYear(year1, month1, day1);
d2 = DayInYear(year2, month2, day2);
return d1d2 ? d1 - d2 : d2 - d1;
//年月都不相同
}else{
//确保year1年份比year2早
if(year1year2)
{
//swap进行两个值的交换
swap(year1, year2);
swap(month1, month2);
swap(day1, day2);
}
int d1,d2,d3;
if(IsLeap(year1))
d1 = 366 - DayInYear(year1,month1, day1); //取得这个日期在该年还于下多少天
else
d1 = 365 - DayInYear(year1,month1, day1);
d2 = DayInYear(year2,month2,day2); //取得在当年中的第几天
cout"d1:"d1", d2:"d2;
d3 = 0;
for(int year = year11; yearyear2; year)
{
if(IsLeap(year))
d3= 366;
else
d3= 365;
}
return d1d2d3;
}
}
int main()
{
int a = DaysBetween2Date("2010-11-11","2011-11-11");
cout"2010-11-11到2011-11-11相差 "a" 天";
system("pause");
return 0;
}
C是在C语言的基础上开发的一种面向对象编程语言,应用广泛 。C支持多种编程范式 --面向对象编程、泛型编程和过程化编程 。最新正式标准C于2014年8月18日公布 。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
todate函数TO_DATE,就是转换数据类型c语言todate函数 , 转换成DATE的数据类型c语言todate函数,然后存在表中吧 。
如果是VARCHAR类型的话,读取的时候只能按字符串读取 。不能按日期数据读取 。
求采纳为满意回答 。
关于c语言todate函数和c语言 todo的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 网禁游戏免费下载安卓手机,游戏禁网是什么意思
- ios抖音怎么自动播放,ios抖音自动播放下一个视频怎么设置的
- postgresql表文件,postGreSQL表分析
- html5结构元素在哪里,html5结构元素有哪些
- python中bp函数吗 python函数abs
- Python调用openai,python调用openai聊天机器人
- iPhone电视怎么关闭,苹果手机如何关闭电视上的自动续费
- 模拟游戏老杨是什么梗的简单介绍
- go语言哪个web框架 go语言哪个web框架在公司里用的最多