何为标准库函数?
就是这套函数在任何平台上都被支持、且保证函数功能一致(基本一致)
使得你的同一个源码,在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);
网友评论