美文网首页
C语言 - 标准库函数

C语言 - 标准库函数

作者: 我阿郑 | 来源:发表于2021-12-14 10:24 被阅读0次

    何为标准库函数?

    就是这套函数在任何平台上都被支持、且保证函数功能一致(基本一致)
    使得你的同一个源码,在windows编译运行的结果、和在linux上编译运行的结果相同。(不需要修改代码)

    一、sprintf与sscanf

    
    #include <stdio.h>
    // sprintf与sscanf  字符串的格式化与解析, 实际工程中常用的一对函数
    
    sprintf – 格式化字符串, 首字母s表示string
    sscanf   - 解析字符串
    
    例:
    char buf[128];
    sprintf(buf, "Name:%s , Age:%d", "shaofa", 33);
    
    // 或
    char* buf = (char*)malloc(128); 
    sprintf(buf, "Name:%s , Age:%d", "shaofa", 33);
    
    // sscanf用于提取字符串的字段
    // sscanf的返回值表示实际解析出的字段的个数
    // sscanf适用于提取数字,不能提取字符串
    const char* text = "2015-12-13";
    int year,month,day;
    int n = sscanf(text, "%d-%d-%d", &year, &month, &day);
    if( n != 3) {
        printf("bad format!\n");
    }
    

    二、rand与srand : 随机数的生成

    #include <stdlib.h>
    // rand 与 srand    随机数的生成
    
    // 每次rand()的返回值是不同的数
    for(int i=0; i<10; i++){
        printf("%d \n", rand());
    }
    
    // 通常地,要对rand()返回的结果取模,使其坐落在一个区间内
    
    // 比如,要在100和160之间随机取一个数。其中,60是区间长度
    int r = rand() % 60 + 100;
    
    // 比如,要在0.00和1.00之间取一个小数
    int r = rand() % 100;
    double rp = r / 100.0; // 转成小数
    
    

    应用举例:彩票随机下注
    有一种彩票叫“七星彩”,每次生成的中奖号码是7个届于0~9之间的随机数字。

    srand (time (NULL));
    int code[7];   // 一注号码为7个数字
    for(int i=0; i<7; i++)
    {
           int r = rand () % 10; 
           code[i] = r;
    }
    

    三、得到当前系统时间

    使用time()函数获取当前时间

    // time_t类型:是一个整数,可以强转为int型来打印
    // time_t的是一个整数,跟编译器有关,通常是32位整数或64位整数
    time_t now = time(NULL);
    printf("now: %d \n", (int) now);
    
    

    转化成“年月里时分秒”

    可以把time_t转成年月日时分秒

    // 使用localtime()函数
    // 输入参数:time_t*
    // 返回值  : tm*
    // 其中,tm是一个struct类型,包含了年、月、日、时、分、秒、星期等详细信息
    tm * localtime(const time_t *p);
    
    // 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~11
        int tm_year;  // 年: +1900
        int tm_wday;  // 星期几: 0~6,其中0表示星期日
        int tm_yday;  // 这一年的第几天: 0~365
    };
    
    // 转化成“年月里时分秒”
    
    time_t now = time(NULL);    
    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;
    

    例:求出自今天起、300天以后的日期值

    time_t now = time(NULL); // 当前时间
    now += 300 * 24 * 3600;  // 加上时间间隔
    tm info = *localtime(&now);
    

    年月里时分秒”转换为time_t?

    我们可以把一个时间转成time_t, 比如,"2015-02-01 00:00:00" 转成 time_t

    // 使用mktime函数
    time_t mktime(tm * p);
    
    time_t convert(int year, int month, int day, 
            int hour, int minute, int second)
    {
        tm info = {0};
        info.tm_year = year - 1900;
        info.tm_mon  = month - 1;
        info.tm_mday = day;
        info.tm_hour = hour;
        info.tm_min = minute;
        info.tm_sec = second;
        return mktime(&info);
    }
    
    例:计算两个日期之间隔了多少天
    比如,“2015-4-6”到“2013-2-2”
    
    time_t start = convert(2013,2,2,0,0,0) ;
    time_t end = convert(2015,4,6,0,0,0);
    // 差值
    int  diff = (int)(end – start);
    // 计算是多少天
    int  days = diff / (24*3600);
    
    

    相关文章

      网友评论

          本文标题:C语言 - 标准库函数

          本文链接:https://www.haomeiwen.com/subject/txesfrtx.html