Date
Jul. 21st, 2024
 
2024年 6月 16日

Post: C Primer 003 : rand()、srand()、time() 函数

C Primer 003 : rand()、srand()、time() 函数

Published 12:05 May 02, 2010.

Created by @ezra. Categorized in #Programming, and tagged as #C/C++.

Source format: Markdown

Table of Content

这篇博客主要介绍 C 语言的 rand()srand() 以及 time() 函数。

rand()

rand() 函数是一个定义在 stdlib.h 中的函数,可以用来获得随机数把标准函数调用语句直接当数字使用就可以得到随机数。

int rand(void);
// 取一个 a 到 b 之间的随机数:
a + rand() % (b - a);

srand()

srand() 函数是一个定义在 stdlib.h 中的函数,可以置新的随机数种子,srand标准函数在每个程序中只应该使用一次。

void srand(unsigned int seed);

time()

time() 函数是一个定义在 time.h 中的函数,可以获得当前的系统时间,直接将time标准函数调用语句当作数字使用就可以得到代表时间的整数。

在 C 语言中时间有两种记录方式:

  • time_t 整数方式,返回时间和 1970 年 1 月 1 日 0 时 0 分 0 秒之间的秒差。

  • struct tm 结构方式,采用 xxxx 年 xx 月 xx 日 xx 时 xx 分 xx 秒形式,结构中包含代表年、月、日、时、分、秒、星期、年日的成员。

struct tm {
    int tm_sec;         /* seconds */
    int tm_min;         /* minutes */
    int tm_hour;        /* hours */
    int tm_mday;        /* day of the month */
    int tm_mon;         /* month */
    int tm_year;        /* year */
    int tm_wday;        /* day of the week */
    int tm_yday;        /* day in the year */
    int tm_isdst;       /* daylight saving time */
};

C 语言提供了 time_t 转换函数:

  • ctime()time_t 整数方式转换为字符串,显示为年月日方式(美式),定义在 time.h 中。
char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);
  • localtime()time_t 整数方式转换为 struct tm 结构方式,程序员可以自由定义显示方式,定义在 time.h 中。
struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);
  • 其他time函数:
Defined in <time.h>
char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);
struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);
time_t mktime(struct tm *tm);
/*
    rand、srand、time练习
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    srand(time(0));
    printf("%d\n",rand());
    printf("%d\n",rand());
    printf("%d\n",rand());
    return 0;
}
Pinned Message
HOTODOGO
I'm looking for a SOFTWARE PROJECT DIRECTOR / SOFTWARE R&D DIRECTOR position in a fresh and dynamic company. I would like to gain the right experience and extend my skills while working in great teams and big projects.
Feel free to contact me.
For more information, please view online résumé or download PDF
本人正在寻求任职 软件项目经理 / 软件技术经理 岗位的机会, 希望加⼊某个新鲜⽽充满活⼒的公司。
如有意向请随时 与我联系
更多信息请 查阅在线简历下载 PDF