c語言日期
1. c語言格式化輸入輸出(關於日期)
寫下這篇文章,主要是記載自己的學習心得,同時也分享給所有正在學習c語言的小白們。
關於日期的輸出呢,看起來是挺簡單的,但當題目要求輸入比如:2019--10--01或者2019--09--10,正在學習c語言的人(包括我)就會卡在這,如何將1~9的「0」一起輸出呢?
其實很簡單,這里巧用「0」,既然題目說到0n(n代表1~9月或者日期),那我們肯定要用到「0」呀,那這個「0」該放哪呢,又是個問題。
但不用慌,想想我們之前的輸出,就應該知道這個「0」應該這樣 printf("%02d",&n);, 而那個2怎麼來的呢,就是代表整個寬度為2(因為月份,日期最大占兩位數),即%04d表示在輸出一個小於4位的數值時,將在前面補0使其總寬度為4位。
因此,在日期時應該: printf("%d %02d %02d",year,month,day);
下面直接放題:
按 yyyy/mm/dd 形式從鍵盤輸入一個日期,按yyyy--mm--dd 形式輸出該日期,其中 yyyy, mm, dd 分別表示年、月、日。
輸入:
2019/10/01
輸出:
2019--10--01
#include<stdio.h>
int main()
{
int year,month,day;
scanf("%d/%d/%d",&year,&month,&day);
printf("%d--%02d--%02d",year,month,day);
}
沒錯這就可以了,這篇呢只是為了鞏固做題的思路,以及給所有的小白看的。當然,還需要大佬們的指導。
2. C語言 日期(年月日 ) 排序
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
/*
一月 Jan. January
二月 Feb. February
三月 Mar. March
四月 Apr. April
五月 May. May
六月 June. June
七月 July. July
八月 Aug. Aguest
九月 Sept. September
十月 Oct. October
十一月 Nov. November
十二月 Dec. December
縮寫:正規的英語中六月、七月不縮寫,九月的縮寫是4個字母,其他月份3個字母。
*/
char strm[12][10]={"Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec"};
struct Date
{
int y,d;
char m[10];
int value;
}d[10000];
int findm(char m[])
{
int i;
for(i=0;i<12;i++)
if(strcmp(m,strm[i])==0)return i;
return -1;
}
bool cmp(Date a,Date b)
{
return a.value<b.value;
}
int main()
{
int n=3,i,j;
/*
3
00 Jan 11
99 Feb 22
08 Mar 02
*/
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%s%d",&d[i].y,d[i].m,&d[i].d);
j=findm(d[i].m);
d[i].value=d[i].y*10000+j*100+d[i].d;
}
sort(d,d+n,cmp);
for(i=0;i<n;i++)
{
printf("%02d %s %02d\n",d[i].y,d[i].m,d[i].d);
}
return 0;
}
3. C語言中存儲日期和時間的最好方法是哪一種
方法沒有最好,只有適不適合。
選擇合適的變數來存儲日期和時間是根據應用場景而定的。
C語言標准庫中提供了以下有關時間的函數:
time()函數可以得到一個從1900年1月1日0點0分0秒到目前的秒數
localtime()函數,將該整數轉換為一個時間結構體struct
tm中。
ctime()和asctime()函數,將時間機器數據轉換成相應格式的字元串形式。
一般,日期和時間都是用於展示,這樣,用字元串變數存儲是最合適的方法:
char datetime[32];
time_t t;
struct tm *p;
t=time(NULL);
p=localtime(&t);
strcpy( datetime, asctime(p) );
當需要計算兩個時間點之間的時間差時,用整型變數存儲時間更為方便:
time_t t1, t2;
t1=time(NULL);
... //do some work
t2=time(NULL);
printf("diff time t1 and t2=%d seconds\n", t2-t1 );
存儲在struct
tm中的時間,更方便編程者按具體的要求格式去處理日期數據。
struct tm {
int tm_sec; /* 秒 – 取值區間為[0,59] */
int tm_min; /* 分 - 取值區間為[0,59] */
int tm_hour; /* 時 - 取值區間為[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */
int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
int tm_year; /* 年份,其值等於實際年份減去1900 */
int tm_wday; /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不了解情況時,tm_isdst()為負。*/
};