ctime存儲
1. 搞不懂.ctime 要怎麼用
/**我不能給出完整程序,只能提供一個框架,首先每一張牌都是相異的,對於一副牌的存儲,不*妨用數組或者鏈表。對於花色和牌面屬性,用數字和字串來存都行。*對於發牌函數,就是一個隨機數加鏈表或數組的查找操作*/#ifndef card_h#define card_h#include &uot;unit.h&uot; //這個裡面可以寫描述牌的類,包括每一張牌屬性 //和函數,屬性包括牌面、花色,函數可以有顯示本張拍信息show() //,還應該有獲得各個屬性的get或set函數 #include <iostream>#include <cstdlib>#include <ctime>using namespace std;class A_Set_Card //描述一副牌{private: unit *top; //表頭 int n; //當前這副牌中有多少張牌 public: card(); //構造函數 ~card(); //析構,這個別忘了 unit* outputone(); //隨機派一張牌 void creat(); //產生不含大小王的一副牌};/* *構造,剛開始時這幅牌為空,(也可以把create函數寫到構造函數里邊) */A_Set_Card::A_Set_Card() { top = NULL; n = 0;} A_Set_Card::~A_Set_Card() //析構函數{ unit *tem = top; //從表頭開始 top = NULL; while (tem) //如果null != tem { unit *pp = tem; //用指針pp接住tem所指向的單元 tem = tem->nextp; //tem後移 delete pp; //析構掉剛才tem所指的單元 } n = 0; //這幅牌中牌數歸零 cout<<&uot;。。。洗完牌。。。&uot;<<endl;} /**創建一副牌,不含大小王*/void A_Set_Card::create() { for(int j=1; j<5; j++) //j的取值{1、2、3、4}代表四種花色 { for(int i=1; i<14; i++) //i的取值{1...13}代表A到K,13種牌面,共13*4 = 52張 { unit *newp = new unit; //生成一張牌 n++; newp->inputnum(i); //inputnum()函數用來設置牌面,具體到unit.h里描述單張牌的類中去寫 if(j == 1) { newp->inputname(&uot;黑桃&uot;); //inputname()函數用來設置花色 } else if (j == 2) { newp->inputname(&uot;紅桃&uot;); } else if (j == 3) { newp->inputname(&uot;梅花&uot;); } else { newp->inputname(&uot;方塊&uot;); } if (top == NULL) //第一張 { top = newp; top->nextp = NULL; } else //非第一張 { unit *tem = top; top = newp; top->nextp = tem; } } }}/** 隨機發一張牌,返回那張牌的對象,我覺得稍微有點難的就在這個函數*/unit* A_Set_Card::outputone() { unit *tem = top; //接過頭 srand(time(0)); //設置隨機種子 int nn = rand()%n; //在這副牌中剩餘的所有牌里隨機選一張 if (nn == 0)//恰好是第一張 { if(tem==NULL)//若空 { cout<<&uot;空鏈表&uot;<<endl; return NULL; } top = tem->nextp; n--; return tem; } else//非第一張 { for (int i=0; i<nn-1; i++) //tem往下移nn次 { tem = tem->nextp; } if(tem==NULL)//若空 { cout<<&uot;空鏈表&uot;<<endl; return NULL; } else { unit *pp = tem->nextp;//刪除這一張 tem->nextp = tem->nextp->nextp; n--;//記住牌數自減 return pp; } }} /**然後是排序函數,其實都挺簡單,我就寫到這吧,希望對你有所幫助*/void A_Set_Card::sort(){} #endif
2. 求助VC中時間的加減
用CTime存儲時間,然後CTimeSpan存儲時間跨度,CTime+CTimeSpan=CTime
3. c語言程序運行時間測試
C/C++中的計時函數是clock(),而與其相關的數據類型是clock_t。在MSDN中,查得對clock函數定義如下:
clock_t clock( void );
這個函數返回從「開啟這個程序進程」到「程序中調用clock()函數」時之間的CPU時鍾計時單元(clock tick)數,在MSDN中稱之為掛鍾時間(wal-clock)。其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對它的定義:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明顯,clock_t是一個長整形數。在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鍾會有多少個時鍾計時單元,其定義如下:
#define CLOCKS_PER_SEC ((clock_t)1000) //CLOCKS_PER_SEC為系統自定義的
可以看到每過千分之一秒(1毫秒),調用clock()函數返回的值就加1。下面舉個例子,你可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的運行時間:
void elapsed_time()
{
printf("Elapsed time:%u secs./n",clock()/CLOCKS_PER_SEC);
}
當然,你也可以用clock函數來計算你的機器運行一個循環或者處理其它事件到底花了多少時間:
#include 「stdio.h」
#include 「stdlib.h」
#include 「time.h」
int main( )
{
long i = 10000000L;
clock_t start, finish;
double Total_time;
/* 測量一個事件持續的時間*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i--) ;
finish = clock();
Total_time = (double)(finish-start) / CLOCKS_PER_SEC;
printf( "%f seconds/n", Total_time);
return 0;
}
在筆者的機器上,運行結果如下:
Time to do 10000000 empty loops is 0.03000 seconds
上面我們看到時鍾計時單元的長度為1毫秒,那麼計時的精度也為1毫秒,那麼我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一些,從而使計時精度更高呢?通過嘗試,你會發現這樣是不行的。在標准C/C++中,最小的計時單位是一毫秒。
4. C++11獲取系統精確到毫秒時間跨
1.使用CTime類(獲取系統當前時間,精確到秒) CString str; //獲取系統時間 CTime tm; tm=CTime::GetCurrentTime();//獲取系統日期 str=tm.Format("現在時間是%Y年%m月%d日 %X"); MessageBox(str,NULL,MB_OK); a,從CTimet中提取年月日時分秒 CTime t = CTime::GetCurrentTime(); int d=t.GetDay(); //獲得幾號 int y=t.GetYear(); //獲取年份 int m=t.GetMonth(); //獲取當前月份 int h=t.GetHour(); //獲取當前為幾時 int mm=t.GetMinute(); //獲取分鍾 int s=t.GetSecond(); //獲取秒 int w=t.GetDayOfWeek(); //獲取星期幾,注意1為星期天,7為星期六 b,計算兩段時間的差值,可以使用CTimeSpan類,具體使用方法如下: CTime t1( 1999, 3, 19, 22, 15, 0 ); CTime t = CTime::GetCurrentTime(); CTimeSpan span=t-t1; //計算當前系統時間與時間t1的間隔 int iDay=span.GetDays(); //獲取這段時間間隔共有多少天 int iHour=span.GetTotalHours(); //獲取總共有多少小時 int iMin=span.GetTotalMinutes();//獲取總共有多少分鍾 int iSec=span.GetTotalSeconds();//獲取總共有多少秒 c,獲得當前日期和時間,並可以轉化為CString CTime tm=CTime::GetCurrentTime(); CString str=tm.Format("%Y-%m-%d");//顯示年月日 2.使用GetLocalTime:Windows API 函數,獲取當地的當前系統日期和時間 (精確到毫秒) 此函數會把獲取的系統時間信息存儲到SYSTEMTIME結構體里邊 typedef struct _SYSTEMTIME { WORD wYear;//年 WORD wMonth;//月 WORD wDayOfWeek;//星期:0為星期日,1為星期一,2為星期二…… WORD wDay;//日 WORD wHour;//時 WORD wMinute;//分 WORD wSecond;//秒 WORD wMilliseconds;//毫秒 }SYSTEMTIME,*PSYSTEMTIME;
5. C語言中的頭文件有多少種都有哪些C函數庫有哪些
iv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;
常見的函數有malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等。具體內容可以在編譯器的包含目錄stdlib.h頭文件中打開查看。
為了方便用戶編寫程序,C語言為用戶開發了大量的庫函數,定義在。H文件,用戶可以調用這些函數來實現強大的功能。因此,對於用戶來說,這些函數的使用是提高編程水平的關鍵。
(5)ctime存儲擴展閱讀:
以下內容適用於頭文件
1.對於具有外部存儲類型的標識符,可以在任何其他源程序文件中聲明後引用它們,這樣用戶就可以完全將具有外部存儲類型的標識符的一些聲明放在頭文件中。
2.具體來說,頭文件可以包括用戶構造的數據類型(例如枚舉類型)、外部變數、外部函數、常量和具有一定通用性或公共量的內聯函數。一般的變數和函數定義不應該放在頭文件中。
其他:
雙假設(雙x,雙y);//給定一個直角三角形的兩條邊的長度,求斜邊的長度。
雙ldexp(雙x,int指數);//計算x*(2的指數次方)。
雙poly(Doublex,intdegree,Doublecoeffs[])//計算多項式。
Ntmatherr(structexception*e)//數學錯誤計算處理程序。
6. c語言,最後printf語句輸出表列為什麼是ctime不是time嗎time_t類型老師也沒教
1、time_t
time_t實際上就是長整型long int,用於存儲1970年1月1日0時0分0秒到現在時刻的秒數,且所表示的時間不能晚於2038年1月18日19時14分07秒。
time_t包含在time.h里:
#ifndef__TIME_T
#define__TIME_T
typedeflongtime_t;
/*時間值time_t為長整型longint*/
#endif
2、time函數
函數功能:得到機器的日歷時間或者設置日歷時間
函數原型:time_t time(time_t *timer);
函數返回:機器日歷時間
參數說明: timer=NULL時得到機器日歷時間,timer=時間數值時,用於設置日歷時間,time_t是一個long類型
所屬文件:<time.h>
3、ctime函數
@函數名稱: ctime
函數原型:char *ctime(time_t *time);
函數功能:得到日歷時間,以字元串形式返回
函數返回:返回字元串格式:星期 月 日 小時:分:秒 年
參數說明:time-該參數應由函數time獲得
所屬文件:<time.h>
綜上,整個程序,定義了time_t類型的變數now,使用time函數獲取機器時間並存儲在變數now中,使用ctime函數將now轉為字元串形式,並通過printf函數輸出。
運行結果
7. MFC關於時間的比較
微軟的ctime 是一個UINT 的數字, 從0-42億多, 1個數字代表一秒, 所以ctimer只能大概跨度136年的時間 ,這個timer是從1971年開始的,所以大概, 所以這個timer到了2106年的樣子就過期了,
所以比較這個time大小,可以直接比較這個數字的大小, 然後相減之後的結果可以化成一個ctime的數據.你試試.原理就是這么樣子