C语言 - 标准库函数

2021-12-14  本文已影响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);

上一篇下一篇

猜你喜欢

热点阅读