简单的随机漫步程序,带有一个奇怪的setw错误



我的任务是为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>

相关内容

  • 没有找到相关文章

最新更新