我该如何修复此代码

时间:2014-04-26 23:37:01

标签: c++

我正在上网。

作业问题是:

  

使用rand()函数打印介于1和100之间的前50个数字。尝试将每5个随机数放在一行中。使用setw()函数对齐。

我目前有以下内容。我知道这是一个无限循环而错误我认为问题出在我的if语句中。

#include <iostream>
#include <time.h>
#include <iomanip>

using namespace std;

int main() {
    int random_number;

    srand(time(NULL));

    random_number = rand() % 100 + 1;
    cout << "50 random numbers are:" << endl;
    while (random_number < 100, rand() % 100 + 1)
    {
        cout << random_number << setw(5) << endl;
        if (random_number == 100)
            break;
    }
    system("pause");
}

4 个答案:

答案 0 :(得分:1)

您的while有问题,请参阅之前的评论。这应该有用。

#include <iostream>
#include <time.h>
#include <iomanip>

using namespace std;

int main() {
    int random_number;

    srand(time(NULL));

    cout << "50 random numbers are:" << endl;
    for(int i=0; i<50; i++)
    {
        random_number = rand() % 100 + 1;
        cout << setw(5) << random_number << endl;
    }
    system("pause");
}

或者,如果您想使用while

#include <iostream>
#include <time.h>
#include <iomanip>

using namespace std;

int main() {
    int random_number;

    srand(time(NULL));

    cout << "50 random numbers are:" << endl;
    int counter=0;
    int random_number;
    while(counter<50)
    {
        counter++; 
        random_number = rand() % 100 + 1;
        cout << setw(5) << random_number << endl;
    }
    system("pause");
}

但只需使用for,因为它更紧凑。

答案 1 :(得分:1)

我理解上面的许多代码都适合op。因为我们可以看到op是编码的新手,这是我的简化尝试。

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main() {
    int random_number, count=0; //Using count as a counter.
    srand(time(NULL));

    cout << "50 random numbers are:" << endl;
    //checking two conditions. count and random number generated is less than 100
    while (count <50) 
    {
        if((random_number = rand() % 100 + 1) > 100 ) continue;
        count++;
        cout<< setw(5) << random_number ;
        //Try to put every 5 random number in one line only.
        if (count %5==0) cout<<endl; 
    }

}

代码问题:

  • 你只生成一次随机数,因为它在外面 while loop。
  • 没有正确的while循环停止条件。给予无限循环。
  • 您的解决方案格式不是问题中的问题。

感谢。

答案 2 :(得分:0)

由于这是作业,我不能发表直接答案。但是,这应该算是现代c ++的一个很好的演示:

查看 Live On Coliru

#include <boost/spirit/include/karma.hpp>
#include <boost/iterator/function_input_iterator.hpp>
#include <boost/random.hpp>

boost::random::variate_generator<boost::mt19937, boost::uniform_int<int> > rdngen(
        boost::mt19937(), boost::uniform_int<int>(1, 1000));

int main() {
    auto f = boost::make_function_input_iterator(rdngen, 0),
         l = boost::make_function_input_iterator(rdngen, 100);

    auto range = boost::make_iterator_range(f, l);

    using namespace boost::spirit::karma;
    std::cout << format_delimited(columns(5) [ right_align(10) [ *auto_ ] ], "\t", range) << "\n";

}

答案 3 :(得分:0)

我认为,对于你发布的内容,你想打印1到100之间的50个随机数,不是吗?如果是这样,我注意到错误是在while循环的leave条件下。您需要一个变量来计算显示的数字,您应该检查此变量是否已达到显示的50个数字。

srand(time(NULL));

random_number = rand() % 100 + 1;
cout << "50 random numbers are:" << endl;
for (int i = 0;i<50;++i)
{
   random_number = rand() % 100 + 1
   cout << random_number << setw(5) << endl;
//   if (random_number == 100)
//       break;
}
system("pause");

在您编写离开条件的方式中,它永远不会离开。退出循环时必须获得100

我希望这篇文章对你有所帮助 谢谢你。