【问题标题】:Printing an Array in rows and columns( one dimensional array)以行和列打印数组(一维数组)
【发布时间】:2016-02-18 21:49:10
【问题描述】:

我需要打印一个包含 50 个值的 int 数组,该数组必须包含多行,并且每行不能有超过 15 个变量。谁能指出我正确的方向或解释我哪里出错了?

#include <iostream>
using namespace std; 
int main() 
{ 
   int alhpa[51]; 

      for(int i = 0; i < 51; i++)
      {
         alpha[i] = -1; // initializes all elements to -1
      }


      for(int i = 0; i < 51; i++)
         { 
            for(int j = 0; j < 15; j++)
               { 
                  cout << alpha[j] << "\t";
               }  
            cout << endl;
         }


   return 0;
}

所以上面的代码可以正常工作,但它并没有达到我的预期,如果你运行它,你会看到数组是按行打印的,每行确实有 15 个变量。问题是它只打印数组中的前 15 个元素,并且每次主循环执行过程都会重置,正如我上面所说,唯一的输出是一遍又一遍的前 15 个变量。

我需要弄清楚如何以与现在打印相同的方式打印此数组,但我需要处理和打印数组中的所有元素。

我知道最后一行不会有 15,因为应该只有 5 的空间,因为 15 * 3 = 45

任何帮助都会很棒!

【问题讨论】:

  • ...上面的代码可以正常工作,只是没有达到我的预期。这不是“不起作用”的定义吗? ;) 双循环的逻辑不正确。想想你想在这里做什么。您希望每 15 个元素输出一个新行。因此,只需创建一个 for 循环(i 从 0 到 50)计算输出元素的次数,每次达到 15 时,输出换行符并重置计数器。
  • @RHertel 这将导致i 的大多数值发生访问冲突。
  • @lurker 这是真的。我注意到了;但我也注意到同时已经发布了一个正确的解决方案,所以没有必要纠正我的评论。我因此删除了它。

标签: c++ arrays printing


【解决方案1】:

如何修改这段代码

for(int i = 0; i < 51; i++)
         { 
            for(int j = 0; j < 15; j++)
               { 
                  cout << alpha[j] << "\t";
               }  
            cout << endl;
         }

到这里

for(int i = 0; i < 51; i += 15)
         { 
            for(int j = i; j < 15+i && j < 51; j++)
               { 
                  cout << alpha[j] << "\t";
               }  
            cout << endl;
         }

这会将它们打印成每行 15 个一组

在这种情况下你的程序的输出将是

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1- 1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1- 1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1- 1
-1 -1 -1 -1 -1 -1

【讨论】:

  • 啊,我知道我今天早些时候有这样的事情,但是当我这样做时,我没有正确编写嵌套循环,感谢您的解决方案!
【解决方案2】:

改变

cout << alpha[j] << "\t";

if(15*i+j < 51)
    cout << alpha[15*i+j] << "\t";

如果你访问的元素只有j,从0循环到14,那么你只打印前15个值是正常的。

通过此更改,您还可以将外部循环更改为for(int i = 0; i &lt; 4; i++)

【讨论】:

    【解决方案3】:

    作为替代方案,您可以对每行元素使用计数器:

    int count = 0;
    
    for (int i = 0; i < 51; i++)
    {
        cout << alpha[i] << "\t";
    
        if (++count == 15)
        {
            cout << endl;
            count = 0;
        }
    }
    
    if (count > 0)    // EOL after any residual values
        cout << endl;
    

    【讨论】:

    • 性能小问题:我会在循环中使用 '\n' 来减少冲洗。
    【解决方案4】:

    你的

    cout << alpha[j] << "\t";
    

    仅引用 j var,这意味着它只会一遍又一遍地重复数组中相同的前 15 项。你需要重构这个嵌套循环来获得你想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多