c语言-生成随机数、获取当前年月日时分秒

rand()简介

  • 头文件 <stdlib.h>

  • 标准的C库中函数rand()可以生成 0~RAND_MAX 之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。

  • rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:

c++ 复制代码
printf("Random numbers are: %i %i\n",rand(),rand());
  • rand()产生伪随机数 ,当随机种子(伪随机序列的初始数值)不变,每次执行rand() 返回相同的值。

  • srand() 伪随机数生成器 让随机种子随着当前时间而变化,使rand()产生不同的随机数序列。

srand()简介

  • rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
  • srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的"随机"。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

c语言的time(0)和time(NULL)区别

  • time(0)time(NULL) 都用于获取当前时刻的unix时间戳

  • time(0)接收一个整数类型的参数;time(NULL)接受一个空指针,两种调用方式在功能上等价,一般time(null)使用较广。

时间戳

  • Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

    • 前缀Unix是因为 Unix 操作系统最早使用了这种时间表示方式并将其命名为 Unix 时间戳。

    • UTC 和 GMT 都是国际标准时间的代表

    • UTC(Coordinated Universal Time):UTC 是一种标准时间,是由国际原子时所提供的时间测量,它是以原子钟为基础,与地球自转无关。UTC 被认为是世界时间的参考时标,被广泛用于全球各地的航空、航海、互联网和科学研究等领域。UTC 通常是通过全球性的时间传输服务来保持精确性。

    • GMT(Greenwich Mean Time):GMT 是相对于格林尼治天文台的时间。原始的 GMT 是以格林尼治天文台的太阳穿越格林尼治子午线的时间作为午夜,被用作参考时间。但随着时间的推移,GMT 已经逐渐被 UTC 取代,尤其在科学和技术领域。在通常情况下,UTC 和 GMT 是相等的。

获取当前年月日-时分秒

c 复制代码
#include <stdio.h>
#include <time.h>

// 结构体用于存储年月日时分秒
struct DateTime {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
};

// 获取当前时刻的年月日时分秒
struct DateTime getCurrentDateTime() {
    // 获取当前时间戳
    time_t now;    
    time(&now);//将time()返回的时间戳存入new指向的地址

    // 将时间戳转换为结构体表示的时间
    struct tm *local = localtime(&now);

    // 将时间转换为自定义的结构体
    struct DateTime currentDateTime;
    currentDateTime.year = local->tm_year + 1900;   // tm_year表示自 1900 年至今的年数
    currentDateTime.month = local->tm_mon + 1;      // tm_mon表示月份,范围为 0-11
    currentDateTime.day = local->tm_mday;          // tm_mday表示月中的天数,范围为 1-31
    currentDateTime.hour = local->tm_hour;         // tm_hour表示小时,范围为 0-23
    currentDateTime.minute = local->tm_min;        // tm_min表示分钟,范围为 0-59
    currentDateTime.second = local->tm_sec;        // tm_sec表示秒数,范围为 0-59

    return currentDateTime;
}

int main() {
    // 获取当前时刻
    struct DateTime current = getCurrentDateTime();

    // 输出当前时刻
    printf("当前时刻:%d年%d月%d日 %02d:%02d:%02d\n", 
           current.year, current.month, current.day, 
           current.hour, current.minute, current.second);

    return 0;
}
相关推荐
vortex51 小时前
解决 VSCode 中 C/C++ 编码乱码问题的两种方法
c语言·c++·vscode
Xiao Fei Xiangζั͡ޓއއ2 小时前
一觉睡醒,全世界计算机水平下降100倍,而我却精通C语言——scanf函数
c语言·开发语言·笔记·程序人生·面试·蓝桥杯·学习方法
子朔不言2 小时前
[ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析
c语言·arm开发·arm2d·显控开发-新龙微
BT-BOX3 小时前
STM32仿真proteus位带操作和keil增加头文件C文件
c语言·stm32·proteus
醉颜凉3 小时前
【NOIP提高组】潜伏者
java·c语言·开发语言·c++·算法
五味香6 小时前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
lb36363636367 小时前
整数储存形式(c基础)
c语言·开发语言
浪里个浪的10247 小时前
【C语言】从3x5矩阵计算前三行平均值并扩展到4x5矩阵
c语言·开发语言·矩阵
<但凡.7 小时前
编程之路,从0开始:知识补充篇
c语言·数据结构·算法
f狐0狸x8 小时前
【数据结构副本篇】顺序表 链表OJ
c语言·数据结构·算法·链表