逐行处理标准输入

Process from standard input line by line

给出这样的问题: 从整数列表中找出最小值和最大值。有 T 个测试用例,对于每个测试,打印编号。当前测试用例的数量和答案。

Input.txt 文件

3
3 4 5 1 2
100 22 3 500 60
18 1000 77 10 300

输出

Test case 1: Max :5, Min :1
Test case 2: Max :500, Min :3
Test case 3: Max :1000, Min :10

在 C++ 中,如何在每个测试用例迭代中只处理来自标准输入的一行。我试过的代码是这样的。

#include <iostream>
#include <iterator>
#include <algorithm>


using namespace std;

int main() {
   
   freopen("input.txt","r",stdin);
   int T;
   cin>>T;

   for(int i=1; i<=T; ++i) {
        vector<int> arrayInt;
        int n;

        //Should only process one line for each test case
        while(cin>>n) {
            arrayInt.push_back(n);
        }

        int max = *max_element(arrayInt.begin(), arrayInt.end());
        int min = *min_element(arrayInt.begin(), arrayInt.end());
        cout<<"Test case " << i << ": Max :" << max << ", Min :"<< min << "\n";
   }

}

我在命令行运行时得到的输出

Test case 1: Max :1000, Min :1

请帮助我修复我的代码。预先感谢您的回答。

In C++, how can I process only one line from standard input in each test case iteration.

std::getline 读取直到找到换行符(这是默认设置,可以使用其他分隔符)。

替换

    while(cin>>n) {
        arrayInt.push_back(n);
    }

    std::string line;
    std::getline(std::cin, line);
    std::istringstream linestream{line};       
    while(linestream >> n) {
        arrayInt.push_back(n);
    }

另请注意,std::minmax_element 可以一次获得最小值和最大值。