初学者C ++ - 简单随机游走程序,带有一个奇怪的setw bug

时间:2014-03-18 19:03:55

标签: c++ debugging random-walk 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

这里有一种非常明显的模式,但是对于我的生活我无法理解......如果它有帮助,这里是输出截图的链接。 http://i.stack.imgur.com/USx4U.png感谢你们给予的任何帮助!

2 个答案:

答案 0 :(得分:1)

答案不在代码中,而在于您对输出的解释。

当pos-10小于0时,你打印这个值的区域会更长(因为减号),那么你的步行者就会出现这种情况。在输出中右移一个位置。

类似的原因,当它从9变为10时,它是不对的。

想想左边的冒号不是直线是什么意思。

答案 1 :(得分:0)

&#34;排队&#34;对于1到10之间的i是有意义的。

取前两行,例如:

  • i == 1时,您pos == 10,而*:之后打印10个空格。
  • i == 2时,您pos == 9*:之后打印9个空格。

但是因为您要在第一行打印0(一个字符)而在第二行打印-1(两个字符),*最终会在同一位置打印线。

顺便说一句,每次运行程序时,您使用相同的值(13699)来播种RNG。

尝试使用更多&#34;随机&#34;价值,例如,基于时间的价值:

srand((unsigned int)time(NULL));

您需要在源文件中#include <time.h>