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

How to print specific amount of elements of array per line?

本文关键字:数组元素 何每行 打印      更新时间:2023-10-16

我想在数组的每一行打印 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;
}

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

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

不过,有一种更简单的方法。 无需执行嵌套循环,只需每 10 个元素打印出一个新行即可。

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

这里有一个很好的紧凑答案:

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

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

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的其他各种答案往往是更好的一般方法。

#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){

尝试以下操作

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

您的问题出在内部循环中:

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

尝试再次阅读它,看看它在做什么,也许通过使用调试器逐步浏览它,你应该能够弄清楚为什么它一次又一次地打印相同的数字,以及为什么你的行变得越来越长。

您可以添加:

如果 ((j % 10) = 0)

添加换行

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