1. 程式人生 > >C語言學習——ANSI C標準函式庫

C語言學習——ANSI C標準函式庫

即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);