首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初学者C++ -带有一个奇怪的setw错误的简单随机游走程序

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

Stack Overflow用户
提问于 2014-03-18 19:03:55
回答 2查看 3.9K关注 0票数 1

我的任务是为C++类创建一个非常简单的随机游走程序。我写了它,并相当肯定一切都是正确的,但我得到了这个奇怪的错误。从0到10,这些步骤排列成一条直线,尽管坐标显示它采取的是左右交替的步数。

代码语言:javascript
复制
#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感谢你们能给予的任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-18 19:19:08

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

当pos-10小于0时,您打印此值的区域就会更长(因为有负号),那么您的“walker”在输出中的位置就会右移。

同样的原因,当它从9到10,它是不正确的。

想想这意味着左边的结肠不是直线。

票数 0
EN

Stack Overflow用户

发布于 2014-03-18 19:28:42

在1到10之间为i“排队”是有意义的。

以前两行为例:

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

但是,由于您在第一行中打印0 (一个字符),在第二行中打印-1 (两个字符),因此*将在每一行中的相同位置结束。

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

尝试使用一个更“随机”的值,例如,基于时间的值:

代码语言:javascript
复制
srand((unsigned int)time(NULL));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22488691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档