如何每行打印特定数量的数组元素?

时间:2014-01-09 00:37:20

标签: c++ arrays

我想在数组的每一行打印10个元素,因此输出看起来像这样:

 1  2  3  4  5  6  7  8  9 10
11 12 13 14 15 16 17 18 19 20
...etc

到目前为止,这是我的代码:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

int main()
{
    srand(time(0));
    int array[1000];
    for (int i = 0; i < 1000; i++) array[i] = rand() % 1000;
    sort(array, array + 1000);
    for (int i = 0; i < 1000;){
        i += 10;
        for(int j = 0; j < i; j++){
            cout << array[j] << " ";
        }
        cout << endl;
    }
    return 0;
}

但我无法让它发挥作用。出于某种原因,它一遍又一遍地重复所有数字。

8 个答案:

答案 0 :(得分:9)

内部循环仅在参数列表中使用j。它还需要考虑i,以便它可以跳过它已经打印出来的数字

虽然有一种更简单的方法。而不是做嵌套循环,只需每10个元素打印一个新行。

for (int i = 0; i < 1000;) {
  cout << array[i] << " ";
  if ((i + 1) % 10 == 0) {
    cout << endl;
  }
}

答案 1 :(得分:4)

这是一个很好的紧凑答案:

const int N = 10;
for ( int i = 0; i < 1000; i++ )
{
    cout << array[i] << ((i+1) % N ? " " : "\n");
}

答案 2 :(得分:3)

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

int main()
{
  srand(time(0));
  int array[1000];
  for (int i = 0; i < 1000; i++) array[i] = rand() % 1000;
  sort(array, array + 1000);
  for (int i = 0; i < 1000;i += 10){
   for(int j = 0; j < 10; j++){
     cout << array[i+j] << " ";
   }
   cout << endl;
  }
  return 0;
}

以下是实时版:http://ideone.com/76ZVp8

我从原始代码中做出的更改是将内循环修复为循环 从

for(int j = 0; j < i; j++){

for(int j = 0; j < 10; j++){

此更改的原因是您不希望在外部循环的每次迭代中从0循环到i。这将为开始的外部循环的每次迭代创建增加的输出数量。

由于我进行了第一次更改以将j从0限制为9,然后下一次更改以修复从

打印输出数组索引的索引
cout << array[j] << " ";

cout << array[i+j] << " ";

之后我创建了ideone代码并注意到仍然错误的输出。在以下代码中,数组的前10个成员被初始增量10跳过:

i += 10;

通过将此增量移动到外部for循环,10的增量将在内循环和换行符之后发生,这是我们想要的。因此外部for循环的新代码变为:

for (int i = 0; i < 1000;i += 10){

答案 3 :(得分:3)

尝试以下

const int N = 10;
for ( int i = 0; i < 1000; i++ )
{
    std::cout << array[i] << " ";
    if ( ( i + 1 ) % N == 0 )  std::cout << std::endl;
}

答案 4 :(得分:3)

要对代码进行最小的更改,请更改以下行:

for(int j = 0; j < i; j++){

为:

for(int j = i-10; j < i; j++){

它应该主要起作用。为了避免其他问题,您还需要更改:

for (int i = 0; i < 1000;){
        i += 10;

for (int i = 10; i < 1000; i+=10) {

但是,那些使用i % 10的其他答案往往是更好的一般方法。

答案 5 :(得分:2)

您的问题出在内循环中:

    for(int j = 0; j < i; j++){
        cout << array[j] << " ";
    }

尝试再次阅读并查看它正在做什么,也许通过使用调试器逐步完成它,你应该能够弄清楚为什么它会一次又一次地打印相同的数字,以及为什么你的线路变得越来越长更长的时间。

答案 6 :(得分:1)

您可以添加:

...

如果((j%10)= 0)

//添加换行符

...

答案 7 :(得分:0)

添加换行符将是解决此问题的简单方法。 简单表示用于描述处理的显式行为。