我无法解析此文件:
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循环。我正在通过&#34;标准输入&#34;来调用我的程序。 Eclipse中的功能。
为什么std::getline
失败并导致程序完成?
问题要求:
澳大利亚选票要求选民对所有候选人进行排名 选择顺序。最初只计算第一个选项,如果 一名候选人获得该候选人超过50%的选票 当选。但是,如果没有候选人获得超过50%,则全部 被列为最低票数的候选人被淘汰。选票 首先对这些候选人进行排名是为了支持他们 排名最高的未被淘汰的候选人。这个消除过程 最弱的候选人,并计算他们的选票,支持 优先未被淘汰的候选人继续直到一名候选人 获得超过50%的选票,或直到所有剩余的候选人 并列。
输入
输入以一行上的单个正整数开头 表示随后的案件数量,每个案件如下所述。 该行后面是一个空行。还有一个空白行 在两个连续的输入之间。
每个案例的第一行是一个整数n $ \ le $ 20表示 候选人人数。接下来的n行由名称组成 候选人按顺序排列,每个长度最多可包含80个字符 任何可打印的字符。随后最多包含1,000行,每行包含 选票的内容。每张选票包含1到n的数字 按某种顺序。第一个数字表示第一个候选人 选择;第二个数字表示第二选择的候选人,等等 上。
输出
每个测试用例的输出由一行组成 包含获胜者的名字或包含的几行 所有被捆绑的候选人的姓名。每两个的输出 连续案例用空行分隔。