我的任务是为c++类创建一个非常简单的随机漫步程序。我写了它,并相当确定一切都是正确的,但我得到了这个奇怪的错误。从0到10,即使坐标显示它交替向左和向右移动,步骤也会对齐。
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int steps,i,pos=10;
srand(13699);
cout << "Please enter the amount of steps to be taken: ";
cin >> steps;
cout << endl;
for (i=0;i<=steps;i++)
{
if (rand()%2)
pos+=1;
else
pos-=1;
cout << i << ": " << pos-10 << ": " << setw(pos) << "*" << endl;
}
} // main
这里很明显有某种模式,但我怎么也弄不清楚……如果有帮助,这里有一个输出截图的链接。https://i.stack.imgur.com/USx4U.png谢谢大家的帮助!
答案不在代码中,而在您对输出的解释中。
当po -10小于0时,则打印此值的区域更长(因为负号),则您的'walker'在输出中向右移动一个位置。
同理,从9到10也不正确。
想想左边的冒号不在一条直线上是什么意思
i
在1和10之间的"排队"是有意义的。
以前两行为例:
- 当
i == 1
时,您有pos == 10
,*
在:
之后打印10个空格。 - 当
i == 2
时,您有pos == 9
,*
在:
之后打印9个空格。
但是由于您在第一行打印0
(一个字符),在第二行打印-1
(两个字符),因此*
在每行的相同位置结束。
顺便说一句,你每次运行程序时都使用相同的值(13699)来播种RNG。
尝试使用更"随机"的值,例如,基于时间的值:
srand((unsigned int)time(NULL));
您需要在源文件中添加#include <time.h>