⑴ c語言有什麼簡單辦法判斷一個字元串是否是合法日期
推薦使用正則表達式,對於驗證日期、手機號或郵箱的合法性很有用!
⑵ C語言中,如何驗證輸入日期的正確性!~
主要驗證三個信息:
a.驗證月數是否在1~12,m>0&&m<=12
b.驗證日數是否超過當月,d>0&&d<=month[m-1]
c.對平閏年的判斷,if((y%4==0&&y%100!=0)||y%400==0)month[1]=29
常式:
#include<stdio.h>
staticintis_valid_date(inty,intm,intd)
{
intmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||y%400==0)
month[1]=29;
returnm>0&&m<=12&&d>0&&d<=month[m-1];
}
intmain(void)
{
inty,m,d;
scanf("%4d-%2d-%2d",&y,&m,&d);
if(is_valid_date(y,m,d))
printf("validdate ");
else
printf("invaliddate ");
return0;
}
⑶ C語言驗證日期格式是否正確
#include<stdio.h>
typedefstruct{inty,m,d;}Date;
intmon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
intcheckDate(Datedate)
{mon[2]=28+(date.y%4==0&&date.y%100||date.y%400==0);
returndate.y>0&&date.m>0&&date.d>0&&date.m<13&&date.d<=mon[date.m];
}
intmain()
{Datedate;
scanf("%d%*c%d%*c%d",&date.y,&date.m,&date.d);
printf("%s",(checkDate(date)?"OK":"Error"));
return0;
}
⑷ 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++中,最小的計時單位是一毫秒。
⑸ C語言 驗證時間戳
有,時間戳一般是一個毫秒值。有系統函數可以獲取。具體是啥記不清了
⑹ c語言 時間函數
c語言時間函數:
1、獲得日歷時間函數:
可以通過time()函數來獲得日歷時間(Calendar Time),其原型為:time_t time(time_t * timer);
如果已經聲明了參數timer,可以從參數timer返回現在的日歷時間,同時也可以通過返回值返回現在的日歷時間,即從一個時間點(例如:1970年1月1日0時0分0秒)到現在此時的秒數。如果參數為空(NUL),函數將只通過返回值返回現在的日歷時間,比如下面這個例子用來顯示當前的日歷時間:
2、獲得日期和時間函數:
這里說的日期和時間就是平時所說的年、月、日、時、分、秒等信息。從第2節我們已經知道這些信息都保存在一個名為tm的結構體中,那麼如何將一個日歷時間保存為一個tm結構的對象呢?
其中可以使用的函數是gmtime()和localtime(),這兩個函數的原型為:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中gmtime()函數是將日歷時間轉化為世界標准時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將日歷時間轉化為本地時間。比如現在用gmtime()函數獲得的世界標准時間是2005年7月30日7點18分20秒,那麼用localtime()函數在中國地區獲得的本地時間會比世界標准時間晚8個小時,即2005年7月30日15點18分20秒。
⑺ 【C語言關於運行時間的小問題】【謝謝大家】【在線等】
一、使用c的time.h中的函數 或者windows api GetTicketCount()函數
使用方式下面的程序裡面有介紹,相信結合具體程序,你更易懂些。
二、使用線程式控制制函數 _beginthreadex,想要使計時不受任何東西影響,最好的方式就是使用線程。
具體請看下面我寫的一個示常式序,編譯一下就可以直接運行。這個程序你可以直接用在你的程序裡面。有任何不解的地方歡迎和我聯系。
#include<stdio.h>
#include<windows.h>
#include <process.h>
#include <time.h>
#define TICKET_ENABLE 0
#define TICKET_DISABLE 0x1
void ticktThread(void *p);
int ticktDisable;
double ration=0;
void main()
{
char str[256];
int count=0;
ticktDisable=TICKET_ENABLE;/*令ticktDisable=TICKET_ENABLE使得計時函數得以運行,程序運行的時候可隨時將ticktDisable=TICKET_DISABLE使計時線程終止*/
_beginthread(ticktThread,0,NULL);//在你想要開始計時的地方,添加這條加上面的那條語句
/*你可以將下面代碼替換成你的代碼,下面的所有代碼都是示例printf,scanf ,while語句等都不會影響計時*/
printf("不管我做什麼計時都不會受到影響\n");
scanf("%s",str);
printf("%s\n",str);
//在此處做任何事情都不會影響計時
//任何時候你都可以獲得計時值,變數ration裡面存的便是當前的計數值
printf("接下來將計時10秒...\n");
while(++count<100)
{
printf("\r當前計時為:%2.1f",ration);
Sleep(100);
}
ticktDisable=TICKET_DISABLE;
printf("\n計時器結束!總運行時間為%4.3f(精確到毫秒)",ration);
Sleep(3000);
}
//計時器clock()函數的使用
void ticktThread(void *p)
{
char displayBuf[128];
clock_t start,end;//首先定義計時點變數
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO c_info;
GetConsoleScreenBufferInfo(hConsole,&c_info);
start=clock();//獲得此刻時間作為計時開始時間
while (!ticktDisable)
{
end=clock();//獲得此刻時間作為計時結束時間
ration=(double)(end-start)/CLOCKS_PER_SEC;/*結束時間-開始時間得到時間差,就得到的計時值*/
sprintf(displayBuf,"正在計時 %2.1f",ration);
SetConsoleTitle(displayBuf);/*設置標題欄,將計時顯示到標題欄是為了讓計時看起來更加直觀,如果不需要,刪除這一句就可以了*/
Sleep(10);
}
}
⑻ 用c語言對用戶輸入的日期型數據進行有效性驗證,yyyy~m~d代表年月日保證
#include<stdio.h>
intmain(intargc,char*argv[]){
inty,m,d,c[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("Inputy,m&d... ");
while(1){
scanf("%d%d%d",&y,&m,&d);
c[1]=28+(y%4==0&&y%100||y%400==0);
if(m>0&&m<13&&d>0&&d<=c[m-1])
break;
printf("Inputerror,redo:");
}
printf("Yourinputis%d-%d-%d ",y,m,d);
return0;
}
⑼ C語言單片機if(irtime<63&&irtime>=33)這個程序的驗證時間是多少
這應該說是遙控器解碼程序把,irtime變數ir是紅外的意思time時間,你這個判斷語句應該是判斷電平的持續時間,在這個范圍內,具體時間眼要看irtime這個變數是在哪裡計數的,這樣就一目瞭然了
⑽ C語言編程問題,驗證出生日期的合法性問題
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
constintMAXSIZE=1000;
unsigneda[MAXSIZE];
voidf1(){
unsigneddate;
inti;
for(i=0;i<MAXSIZE;++i){
date=rand()%(2015-1890+1)+1890;
date=10000*date+rand()%1131+101;
a[i]=date;
}
}
intf2(unsigneddate){
unsignedyear=date/10000;
unsignedmonth=date%10000/100;
unsignedday=date%10000%100;
if(year<1890||year>2015)return0;
if(month<1||month>12)return0;
if(day<1||day>31)return0;
if(month==2){
if(year%4==0&&year%100!=0||year%400==0){
if(day>29)return0;
}
elseif(day>28)return0;
}
switch(month){
case4:
case6:
case9:
case11:if(day>30)return0;
}
return1;
}
voidf3(unsigneddate){
printf("%u年",date/10000);
printf("%02u月",date%10000/100);
printf("%02u日 ",date%10000%100);
}
intmain(){
inti;
srand((unsigned)time(NULL));
f1();
for(i=0;i<MAXSIZE;++i)
if(f2(a[i]))f3(a[i]);
return0;
}