以行和列显示输出

时间:2016-10-14 08:52:11

标签: c++ arrays input output

我想显示如下输出:

Count      Input       Total  
-----      ------      -----  
1                 2           2  
2               4           6  
3               6           12  
4               8           20

Average : 5

这是我的尝试:

int count=1,num,total=0;
cout<<"Count    Input   Total"<<endl;
cout<<"-----    -----   -----"<<"\n";
while(count<=4)
{
    cout<<count<<"\t";
    cin>>num;
    total=total+num;
    cout<<"\t\t"
        <<total<<endl;
    count++;
}
cout<<"Average : "
    <<total/4;

return 0;
}  

但它是这样的:

Count   Input   Total  
-----   -----   -----  
1       2  
                      2  
2       4  
                6  
3       6  
                12  
4       8  
                20  
Average : 5
--------------------------------
Process exited after 5.785 seconds with return value 0
Press any key to continue . . .

1 个答案:

答案 0 :(得分:0)

您正在将程序的输出与键盘输入混合,两者都显示在同一控制台上。

cin&gt;&gt; num取得的控制台输入仅在您按下键盘上的“enter”后才会收到,而这又会导致屏幕上的输出转到下一行。< / p>

如果你想在屏幕上的下一行移动光标时禁止“输入”,这不能通过c ++轻松完成,通常在Linux或Windows或其他操作系统中有办法这样做(stty -echo) ,回声,等等)。但是那样也会抑制出现的类型整数,因此在你的代码中你需要在它们进来时将它们打印出来。

然而,人们通常不会尝试将键盘输出与程序输出混合成表格等连贯的东西。你的程序可以先简单地询问键盘输入,将输入存储到数组或向量中,然后使用该输入写入表格。很可能这就是问题要求你做的事情。

#include <iostream>
#include <vector>

using namespace std;

void output(vector<int> &vals) {
    unsigned int count = 1;
    int total = 0;
    cout << "Count\tInput\tTotal" << endl;
    cout << "-----\t-----\t-----" << endl;
    while (count <= vals.size()) {
        int num = vals[count - 1];
        total += num;
        cout << count << "\t" << num << "\t" << total << endl;
        count++;
    }
    cout << "Average : " << total / (count - 1) << endl;
}

vector<int> input() {
    vector<int> vals;
    for (int i = 0; i < 4; i++) {
        int num;
        cin >> num;
        vals.push_back(num);
    }
    return vals;
}

int main() {
    output(input());
}


5
7
2
11
Count   Input   Total
-----   -----   -----
1       5       5
2       7       12
3       2       14
4       11      25
Average : 6