Я неисправный разобрать этот файл:станд :: GetLine застрял на конце централизованного ввода
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;
}
В частности, процесс застревает в то время цикл после прочтения последней строки файла. Я вызываю свою программу через функцию «Стандартный ввод» в Eclipse.
Почему не std::getline
не удается завершить программу?
требования Проблема:
Австралийские бюллетени требуют, чтобы избиратели ранжировать всех кандидатов в порядке выбора. Первоначально учитываются только первые выборы, и если один кандидат получает более 50% голосов, тогда выбирается кандидат . Однако, если ни один из кандидатов не получает более 50%, все кандидатов, увязанных за наименьшее количество голосов, исключаются. Бюллетени ранжирование этих кандидатов сначала пересчитывается в пользу их наивысшего ранга не исключенного кандидата. Этот процесс устранения самых слабых кандидатов и подсчета их избирательных бюллетеней в пользу предпочтительного неисполненного кандидата продолжается до тех пор, пока один кандидат не получит более 50% голосов или пока не будут привязаны все оставшиеся кандидаты .
Входной
вход начинается с одного положительного целого числа на отдельной строке с указанием количества случаев следующие, каждый, как описано ниже. За этой строкой следует пустая строка. Также существует пустая строка между двумя последовательными входами.
Первая строка каждого случая представляет собой целое число n $ \ le $ 20, указывающее число кандидатов . Следующие n строк состоят из имен кандидатов по порядку, каждая длиной до 80 символов и содержит любых печатных символов. До 1000 строк, каждая из которых содержит содержание бюллетеня. Каждый бюллетень содержит цифры от 1 до n в некотором порядке. Первое число указывает кандидата первого ; второе число указывает кандидата второго выбора, и поэтому on.
Выход
Выход каждого тест состоит либо из одной строки , содержащего имя победителя или нескольких строк, содержащих имен всех кандидатов, которые связаны. Выход каждого из двух последовательных случаев разделяется пустой строкой.
с помощью '' getline' с cin' не будет ждать вечно для более вход со стандартного входа, независимо от того, как большой вклад, который вы уже дали, он будет ждать больше. – David
Код завершается, как и ожидалось для меня. –
Пожалуйста, не смешивайте 'std :: cin' и' std :: getline' - это беспорядок. – erip