前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第五章 调试:do-while循环:while循环和do-while循环的区别

第五章 调试:do-while循环:while循环和do-while循环的区别

作者头像
酱紫安
发布2021-05-11 14:24:32
1.8K0
发布2021-05-11 14:24:32
举报
文章被收录于专栏:python学习路python学习路

C++ 库有一个名为 rand() 的函数,每次调用该函数都将返回一个非负整数。要使用 rand() 函数,必须在程序中包含 <cstdlib> 头文件。但是,该函数返回的数字其实是伪随机数。这意味着它们具有随机数的表现和属性,但实际上并不是随机的,它们实际上是用算法生成的。

该算法需要一个起始值,称为种子,以生成数字。如果没有给出一个种子,那么它将在每次运行时产生相同的数字流

要在每次运行程序时获得不同的随机数字流,则必须为随机数生成器提供一个种子以开始。在 C++ 中,这是通过调用 srand 函数完成的。 在 rand 被调用之前,srand 函数要先被调用,并且 srand 在整个程序中仅被调用一次。

代码语言:javascript
复制
# include <iostream>
# include <cstdlib>

using namespace std;

int main(){
    unsigned seed;
    while (true){
        cin >> seed;
        srand(seed);
        cout << rand() << endl;
        cout << rand() << endl;    
    }
}

从程序的输出可以看出,每次程序使用不同的种子运行时,都会生成不同的随机数字流。然而,如果再次使用 19 或 171 作为种子运行程序,则将获得与第一次完全相同的数字。

实际上,获取种子值的另一个常见做法是调用 time 函数,它是 C++ 标准库的一部分。

time 函数返回从 1970 年 1 月 1 日午夜开始到现在逝去的秒数,因此每次运行程序时,它都将提供不同的种子值。下面程序演示了 time 函数的用法。请注意,在调用它时必须给它传递一个参数 0。同时程序中包含一个新的头文件 ctime,此头文件是使用 time 函数所必需的。

代码语言:javascript
复制
# include <iostream>
# include <cstdlib>
# include <ctime>

using namespace std;

int main(){
    // 使用循环模拟拳皇对战 
    /** HP */ 
    int hp1 = 100;
    int hp2 = 100; 
    
    int attack1 = 0;   // 八神的攻击力 
    int attack2 = 0;   // 草稚京的攻击力
    int randNum;       //用来存放玩家攻击先后的随机数变量
    
    srand(time(NULL));
    // 当双方都生存的时候,继续战斗过程
    while (hp1 > 0 && hp2 > 0) {
        // 1.模拟玩家出招:可以采用随机数是奇偶决定谁先出招
        // 奇数--八神   偶数--草稚京先
        randNum = rand();
        //cout << RAND_MAX << endl;
        if (randNum % 2 == 1){
            attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
            attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
            
            hp2 -= attack1;
            hp1 -= attack2;        
        }
        else{
            attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
            attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
            
            hp1 -= attack2;
            hp2 -= attack1;
        }
        
    }

    //打印对战的最终结果
    cout << "八神庵:"  << hp1 << endl; 
    cout << "草稚京:"  << hp2 << endl;
    cout << rand() << endl;  
}

调试:

  1. 分析错误
  2. 设置断点
  3. 启动调试
  4. 单步运行
  5. 观察变量
  6. 发现问题
  7. 修正代码重新运行

do-while循环:

特点:先执行,在判断

  • 先执行一遍循环操作
  • 符合条件,循环继续
  • 否则循环退出

while循环和do-while循环的区别

  • 执行顺序不同
  • 初始情况不满足循环条件时:
    • while循环一次都不会执行
    • do-while循环不管任何情况都至少执行一次
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 调试:
  • do-while循环:
    • 特点:先执行,在判断
    • while循环和do-while循环的区别
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档