我试图显示相同的数据,但是在两列中,所以放学后第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;
}
}
}
答案 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::setw
或std::setfill
这样的操纵者可能会使用一些改进,但重点是:
i
执行i + 18
和的输出。