繁体   English   中英

std :: getline卡在管道输入的末尾

[英]std::getline stuck on end of piped input

我无法解析此文件:

1

3
John Doe
Jane Smith
Jane Austen
1 2 3
2 1 3
2 3 1
1 2 3
3 1 2

使用以下程序:

#include <iostream>
#include <sstream>

int main( int argc, char * argv[] )
{

    int cases, candidates_number;
    char candidates[20][80];
    int votes[20][1000];
    int votes_count[20];

    std::string line;

    std::cin >> cases;
    std::cin.get();
    std::cin.get();

    for (int i=0; i<cases; i++) {

        std::cin >> candidates_number;
        std::cin.get();

        for (int j=0; j<candidates_number; j++) {
            std::cin.getline(candidates[j], sizeof(candidates[j]), '\n');
        }

        int votes_number = 0;

        while (std::getline(std::cin, line)) {
            if (line.empty()) {
                break;
            }
            std::cout << line;
            votes_number++;
        }

    }
    return 0;
}

特别是,在读取文件的最后一行之后,该过程陷入了while循环中。 我正在通过Eclipse中的“标准输入”功能来调用程序。

为什么std::getline不会失败并导致程序完成?


问题要求:

澳大利亚的选票要求选民按照选择的顺序对所有候选人进行排名。 最初只计算第一选择,如果一个候选人获得超过50%的选票,则当选该候选人。 但是,如果没有候选人获得超过50%的选票,则所有票数最少的候选人将被淘汰。 优先考虑将这些候选人排名第一的选票,以支持其排名最高的未淘汰候选人。 淘汰最弱的候选人并计算其票数以偏爱未被淘汰的候选人的过程一直持续到一名候选人获得超过50%的选票或所有其余候选人并列为止。

输入项

输入以一行上的单个正整数开头,指示其后的情况数,每种情况如下所述。 该行后跟空白行。 在两个连续的输入之间也有一个空白行。

每个案例的第一行是一个整数n $ \\ le $ 20,表示候选者的数量。 接下来的n行按顺序包含候选名称,每行的长度最多80个字符,并包含任何可打印的字符。 随后最多1,000行,每行包含一个选票的内容。 每个选票都按一定顺序包含从1到n的数字。 第一个数字表示首选候选人; 第二个数字表示第二选择的候选者,依此类推。

输出量

每个测试用例的输出由包含获胜者姓名的一行或包含并列所有候选人名称的几行组成。 每两个连续案例的输出由空白行分隔。

该程序实际上是正确的,但是我以错误的方式通过Eclipse提供了输入文件(它被视为交互式输入):

在此处输入图片说明

使用程序参数< input可以按预期工作:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM