C++中if语句与rand()函数工作异常问题咨询
问题分析与修复方案
嘿,我一眼就揪出你代码里的问题啦!核心原因是你在打印和判断时用了两个完全独立的随机数,这才导致结果看起来完全不符合预期。
具体问题拆解
每次调用rand()函数都会生成一个全新的随机值,你的代码里:
- 循环里的
cout << (rand()%6) << endl ;生成并打印了一个随机数(注意这个值的范围是0-5,不是你以为的1-6哦) - 之后的
if((rand()%6) >= 3)又生成了另一个全新的随机数来做判断
这两个随机数没有任何关联!举个例子:
- 循环里生成1(明明小于3),但if里恰好生成3,就会错误输出"nowaay"
- 循环里生成5(明明大于等于3),但if里生成2,就不会输出"nowaay"
另外补充个小细节:如果你想要生成1-6的随机数,得把rand()%6改成rand()%6 + 1,原来的写法只能得到0-5的整数。
修复后的代码
把随机数先存到一个变量里,这样打印和判断用的是同一个值,结果就会严格符合你的预期了:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(time(0)) ; // 把随机数存储到变量中,确保后续使用的是同一个值 int roll = rand()%6 + 1; // 这里改成了1-6的范围,需要0-5的话可以去掉+1 cout << roll << endl ; if(roll >= 3) { cout << " nowaay " ; } }
内容的提问来源于stack exchange,提问作者Raza Syed
相关产品推荐
相关产品推荐

