我的任务是为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感谢你们给予的任何帮助!
答案 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>
。