以两列c ++显示数据

时间:2015-03-21 17:22:39

标签: c++ arrays tabular

我试图显示相同的数据,但是在两列中,所以放学后第19周,数据应显示在表格右侧的列中,直到达到总学校周数,即36.下面是代码:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;
int const schoolWeeks = 37;
string week[] = { "A", "B", "C", "D" };
int num = 0;

int main()
{
cout << left << setw(9) << setfill(' ') << "Week " << left << setw(9) << setfill(' ')<< "Menu" << left << setw(9) << setfill(' ') << "Week " << "Menu" << endl;
for (int i = 1; i < 20; i++)
{   
    cout << left << setw(9) << setfill(' ')<< i << week[num] << endl;

    num = num + 1;
    if (num == 4)
    {
        num = 0;
    }

}
for (int i = 20; i < schoolWeeks; i++)
{
    cout << left << setw(9) << setfill(' ') << i << week[num] << endl;

    num = num + 1;
    if (num == 4)
    {
        num = 0;
    }

}

}

1 个答案:

答案 0 :(得分:0)

std::cout的标准输出基于 stream 数据的概念。请记住,出于某种原因,它被称为“io stream ”。这意味着一旦你向std::cout写了一些东西,你就不能“回头”几行并添加一些内容。

考虑在Linux shell或Windows命令行中进行管道连接。可以将程序的输出重定向为另一个程序的输入,然后可以用它做任何可以想象的事情,例如,通过互联网发送:

myprogram.exe > otherprogram.exe

在这种情况下,你怎么可能在已写入的行中添加一些内容?

考虑到所有这些,很明显唯一可行的解​​决方案是事先知道每一行的内容。在考虑第二列之前,你不能等到第19行,你必须马上做。换句话说,首先打印第1周和第19周,然后是第2周和第20周,然后是第3周和第21周,依此类推。看模式?它总是“第一列X周,第二列X + 18”。这就是解决方案。

这是一个快速编写的循环,遵循现有代码的风格:

for (int i = 1; i < 19; i++)
{   
    cout << left << setw(9) << setfill(' ')<< i << week[num]
         << left << setw(9) << setfill(' ') << " " << (i + 18) << " "
         << left << setw(9) << setfill(' ') << " " << week[num]
         << endl;

    num = num + 1;
    if (num == 4)
    {
        num = 0;
    }
}

std::setwstd::setfill这样的操纵者可能会使用一些改进,但重点是:

  1. 循环仅从1到18。
  2. 正文为i执行i + 18 的输出。