C語(yǔ)言學(xué)習(xí)8-標(biāo)準(zhǔn)庫(kù)函數(shù)

一、什么是標(biāo)準(zhǔn)庫(kù)函數(shù)?

標(biāo)準(zhǔn)庫(kù)函數(shù)是指那些在任何平臺(tái)上都被支持、且功能保持一致的函數(shù)。這使得同一份源代碼在Windows和Linux等不同平臺(tái)上編譯運(yùn)行的結(jié)果相同,無(wú)需修改代碼。

sprintf 與 sscanf

函數(shù)說(shuō)明

  • sprintf - 將數(shù)據(jù)格式化為字符串(s代表string)
  • sscanf - 從字符串中解析數(shù)據(jù)

使用示例

#include <stdio.h>

// sprintf 示例:格式化字符串
char buf[128];
sprintf(buf, "姓名:%s, 年齡:%d", "張三", 28);

// 或者動(dòng)態(tài)分配內(nèi)存
char* buf = (char*)malloc(128);
sprintf(buf, "姓名:%s, 年齡:%d", "張三", 28);

// sscanf 示例:解析字符串
// 返回值表示成功解析的字段數(shù)量
// 注意:sscanf更適合解析數(shù)字,解析字符串時(shí)需謹(jǐn)慎
const char* date_text = "2015-12-13";
int year, month, day;
int parsed_count = sscanf(date_text, "%d-%d-%d", &year, &month, &day);

if (parsed_count != 3) {
    printf("日期格式錯(cuò)誤!\n");
}

二、rand 與 srand:隨機(jī)數(shù)生成

函數(shù)說(shuō)明

  • rand - 生成隨機(jī)數(shù)
  • srand - 設(shè)置隨機(jī)數(shù)種子

使用示例

#include <stdlib.h>
#include <time.h>

// 生成隨機(jī)數(shù)(每次運(yùn)行結(jié)果不同)
for (int i = 0; i < 10; i++) {
    printf("%d\n", rand());
}

// 生成指定范圍內(nèi)的隨機(jī)數(shù)

// 示例1:生成100到159之間的隨機(jī)數(shù)
int random_num = rand() % 60 + 100;

// 示例2:生成0.00到1.00之間的小數(shù)
int rand_int = rand() % 100;
double rand_decimal = rand_int / 100.0;

// 實(shí)際應(yīng)用:七星彩號(hào)碼生成
srand(time(NULL));  // 用當(dāng)前時(shí)間設(shè)置隨機(jī)種子
int lottery_numbers[7];  // 一注7個(gè)數(shù)字

for (int i = 0; i < 7; i++) {
    int digit = rand() % 10;  // 0~9的隨機(jī)數(shù)
    lottery_numbers[i] = digit;
}

三、時(shí)間處理函數(shù)

1. 獲取當(dāng)前系統(tǒng)時(shí)間

#include <time.h>

// 方法1:獲取時(shí)間戳
// time_t類(lèi)型通常是32位或64位整數(shù)
time_t current_time = time(NULL);
printf("當(dāng)前時(shí)間戳: %ld\n", (long)current_time);

2. 時(shí)間戳轉(zhuǎn)換為詳細(xì)時(shí)間信息

// 使用localtime函數(shù)將時(shí)間戳轉(zhuǎn)換為詳細(xì)時(shí)間
// 輸入:time_t指針
// 輸出:tm結(jié)構(gòu)體指針
struct tm* localtime(const time_t* time_ptr);

// tm結(jié)構(gòu)體定義
struct tm {
    int tm_sec;   // 秒: 0~59
    int tm_min;   // 分: 0~59
    int tm_hour;  // 時(shí): 0~23
    int tm_mday;  // 日: 1~31
    int tm_mon;   // 月: 0~11(使用時(shí)需+1)
    int tm_year;  // 年: 從1900開(kāi)始計(jì)算(使用時(shí)需+1900)
    int tm_wday;  // 星期: 0~6(0=星期日)
    int tm_yday;  // 年內(nèi)天數(shù): 0~365
};

// 轉(zhuǎn)換示例
time_t now = time(NULL);
struct tm time_info = *localtime(&now);

int year = time_info.tm_year + 1900;
int month = time_info.tm_mon + 1;
int day = time_info.tm_mday;
int hour = time_info.tm_hour;
int minute = time_info.tm_min;
int second = time_info.tm_sec;

3. 計(jì)算未來(lái)日期

// 示例:計(jì)算300天后的日期
time_t current = time(NULL);
time_t future = current + (300 * 24 * 3600);  // 加上300天的秒數(shù)
struct tm future_info = *localtime(&future);

4. 時(shí)間信息轉(zhuǎn)換為時(shí)間戳

// 使用mktime函數(shù)將時(shí)間信息轉(zhuǎn)換為時(shí)間戳
time_t mktime(struct tm* time_ptr);

// 轉(zhuǎn)換函數(shù)示例
time_t convert_to_timestamp(int year, int month, int day, 
                           int hour, int minute, int second)
{
    struct tm time_info = {0};
    time_info.tm_year = year - 1900;  // 年份需要減去1900
    time_info.tm_mon = month - 1;     // 月份需要減去1
    time_info.tm_mday = day;
    time_info.tm_hour = hour;
    time_info.tm_min = minute;
    time_info.tm_sec = second;
    
    return mktime(&time_info);
}

// 實(shí)際應(yīng)用:計(jì)算兩個(gè)日期之間的天數(shù)差
time_t start_date = convert_to_timestamp(2013, 2, 2, 0, 0, 0);
time_t end_date = convert_to_timestamp(2015, 4, 6, 0, 0, 0);

// 計(jì)算時(shí)間差(秒)
long time_diff = (long)(end_date - start_date);

// 轉(zhuǎn)換為天數(shù)
int days_diff = time_diff / (24 * 3600);
printf("兩個(gè)日期相差 %d 天\n", days_diff);

四、關(guān)鍵要點(diǎn)總結(jié)

  1. sprintf/sscanf:用于字符串格式化和解析,注意sscanf返回值表示成功解析的字段數(shù)
  2. rand/srand:生成隨機(jī)數(shù)前需要用srand設(shè)置種子,通常使用time(NULL)作為種子
  3. 時(shí)間處理
    • time()獲取當(dāng)前時(shí)間戳
    • localtime()將時(shí)間戳轉(zhuǎn)換為詳細(xì)時(shí)間結(jié)構(gòu)
    • mktime()將時(shí)間結(jié)構(gòu)轉(zhuǎn)換為時(shí)間戳
    • 注意年份和月份的轉(zhuǎn)換規(guī)則(年份-1900,月份-1)

這些標(biāo)準(zhǔn)庫(kù)函數(shù)保證了代碼的跨平臺(tái)兼容性,是C語(yǔ)言編程中的重要工具。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包。 uni...
    思?jí)鬚HP閱讀 2,133評(píng)論 1 24
  • 1.水仙花數(shù) 2.二維數(shù)組 3.二維數(shù)組賦值 4.輸出二維數(shù)組的值 這里存在數(shù)組越界的情況,但是c 與 Java不...
    任振銘閱讀 337評(píng)論 1 0
  • 總結(jié)了一些開(kāi)發(fā)中常用的函數(shù): usleep() //函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() //函數(shù)從二進(jìn)制...
    ADL2022閱讀 541評(píng)論 0 3
  • usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解包。uniqid() ...
    知碼客閱讀 264評(píng)論 0 0
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對(duì)數(shù)據(jù)進(jìn)行解...
    上街買(mǎi)菜丶迷倒老太閱讀 1,487評(píng)論 0 20

友情鏈接更多精彩內(nèi)容