C語言學習——ANSI C標準函式庫
阿新 • • 發佈:2019-01-26
即C語言環境自帶的變數和方法等
stdio.h
getchar和putchar
前者或者控制檯輸入的字元
後者輸出字元
例如:
char c;
while((c=getchar())!='\n'){
putchar(c);
}
gets和puts
輸入和輸出字串
例如:
char cs[10];
gets(cs);
puts(cs);
sprintf和sscanf
前者為格式化字串。後者為提取字串中的數字
char buf1[128];
sprintf(buf1,"NAME:%s,Age:%d","zwq",21 );
//格式化字串。引數:要寫入的字串變數,字串格式,字串值
printf("%s\n",buf1);
char* ch1=(char*)malloc(128);
sprintf(ch1,"NAME:%s,Age:%d","zwq",21);
//第一個引數也可為指標
printf("%s\n",ch1);
//sscanf用於提取數字,注意是數字
const char buf2[]="2016-09-26";
int year,month,day;
int count=sscanf(buf2,"%d-%d-%d",&year,&month,&day);
//count 表示提取到幾個變數
if(count==3){
printf("當前年為%d,當前月為%d,當前日為%d\n",year,month,day);
}else{
printf("獲取資料出錯\n");
}
注:如果要提取字串中的數字之外的資料則需要使用字串的分割
string.h
strcpy
賦值字串
兩個引數:第一個引數要賦值的變數,第二個引數賦的值
strlen
字串長度
一個引數:所求的字串
strtok
分割字串
例如:
char str[] = "now # is the time for all # good men to come to the # aid of their country" ;
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
result = strtok( NULL, delims );
}
stdlib.h
rand();
返回隨機數 缺點:偽隨機數,只能隨便一次執行的執行次數生成隨機數,例如重複執行生成隨機數的程式,得到的結果是一樣的
srand();
設定隨機數序列,預設為srand(1);引數為任何一個int,不同的序列會產生不同的隨機數
例如
srand(time(NULL));
for(int i=0;i<10;i++){
printf("%d\n",rand());
}
注:一般需要隨機數在某個區間,這個時候需要知道的是:取餘一個數,則不可能超過這個數
例如:隨機生成 0~10:rand()*10;
隨機生成1~10:rand()*9+1
time.h
time_t
時間格式變數
time(NULL)
返回當前時間與1970-01-01 00:00:00的時間差(單位為秒)
tm
時間結構體
即
struct tm
{
int tm_sec;//秒
int tm_min;//分
int tm_hour;//時
int tm_mday;//日
int tm_mon;//月
int tm_year;//年
int tm_wday;//周幾:~6,表示週一
int tm_yday;//當前年的第幾天
}
localtime
將秒數轉化為tm格式
案例1:求當前的年月日時分秒
time_t now=time(NULL);
//把now(單位為秒)轉化成時間格式
tm info= *localtime(&now);
int year=info.tm_year + 1900;
int month=info.tm_mon +1;
int day=info.tm_mday;
int hour=info.tm_hour;
int minute=info.tm_min;
int second=info.tm_sec;
printf("year==%d\nmonth==%d\nday==%d\nhour==%d\nminute==%d\nsecond==%d",
year,month,day,hour,minute,second);
mktime
將一個tm物件(結構體)轉換成time_t格式
案例2:求兩個日期之間的日數差
time_t convert(int year,int month,int day,int hour,int min,int sec)
{
tm info={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
info.tm_hour=hour;
info.tm_min=min;
info.tm_sec=sec;
time_t t=mktime(&info);
return t;
}
time_t start=convert(2016,9,28,0,0,0);
time_t end=convert(2016,9,29,0,0,0);
int secs=(int)(end-start);
int days=secs/(24*3600);