網站首頁 編程語言 正文
rand函數
先看一下下面這張圖:
通過這張圖我們可以了解到rand函數的返回值是int類型,形參為空,它的頭文件<stdlib.h>以及它的返回值范圍是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,轉換成二進制就是32767.所以rand返回的隨機數的范圍就是0到32727。
其實我們用rand函數就可以生成隨機數了,那為什么我們還要用到srand函數呢?
因為只有第一次生成的隨機數是隨機的,如果程序執行多次,那第二次之后生成的隨機數就會和第一次生成的一樣。這是一種偽隨機。
因此只用到rand函數是不夠的,我們要用rand函數之前,先用strand函數。
srand函數
看一下strand函數,返回值為void,形參是int類型的數據,要用strand函數,首先要給strand傳一個int類型的數據,根據傳進去的值不同,生成的隨機數也不同。但是這樣就矛盾了。生成一個隨機數之前首先要傳進去一個隨機數,為了解決這個問題,就要使用時間戳。
時間戳
我們無法給它一個隨機數,但是我們可以用時間作為參數傳進去,時間是變的,這樣生成的隨機數也就是變的。怎么獲得時間戳呢?C語言也為我們提供了一個time函數可以幫助我們獲得時間戳。
time的頭文件是<time.h>,time的函數原型有點復雜,看不懂沒關系,會用就行。我們只是要把time的值作為參數傳給strand函數。strand的形參是unsigned int類型的,而time的返回值是time_t類型的,我們可以強制類型轉換。time的形參是指針類型的參數,我們用NULL就可以了。
srand((unsigned int)time(NULL));
解決完這個問題,我們還要解決rand生成隨機數的范圍的問題,我們如果要獲得一個1~N之間的數的話,就要對生成的隨機數對N進行取余+1.為了方便猜數字,生成的隨機數范圍就控制在1到100.猜數字不是一次就能才對的,猜不對就要一直猜,猜對了才退出。下面是完整代碼。
完整代碼與程序運行圖
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("|-------------------|\n");
printf("|-----1.玩游戲------|\n");
printf("|-----0.退出--------|\n");
printf("|-------------------|\n");
}
void game()
{
int ret = rand()%100+1;
int m = 0;
while (1)
{
scanf("%d", &m);
if (m > ret)
{
printf("猜大了!\n");
}
else if (m < ret)
{
printf("猜小了!\n");
}
else
{
printf("恭喜你,猜對了!\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int n = 0;
do
{
menu();
printf("請選擇:");
scanf("%d", &n);
switch (n)
{
case 1:
printf("開始猜數字\n");
game();
break;
case 0:
printf("已退出\n");
break;
default:
printf("選擇錯誤,請重新選擇\n");
break;
}
} while(n);
return 0;
}
程序運行圖如下:
原文鏈接:https://blog.csdn.net/m0_63463510/article/details/125637420
相關推薦
- 2022-10-02 SQL堆疊注入簡介_MsSql
- 2022-08-11 GoFrame基于性能測試得知grpool使用場景_Golang
- 2022-07-13 k8s 之 kubectl 提示 “The connection to the server loc
- 2022-05-23 Go語言映射內部實現及基礎功能實戰_Golang
- 2022-12-23 Kubernetes?權限管理認證鑒權詳解_云其它
- 2022-01-09 el-checkbox 狀態切換,將boolean轉換成1遇到的問題
- 2022-07-11 atom插件之·atom-minify配置支持壓縮es6
- 2022-03-19 基于React?Hooks的小型狀態管理詳解_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支