Я сканирую текстовый документ, и он отформатирован так:
3 10
1
2
2
1
3
1
1
1
2
2
Первые два целых числа в верхней части представляют количество кандидатов и количество голосов соответственно. У меня возникают трудности с определением строки для количества голосов, «10»
Так как я работаю в C ++, я пытался сделать это до сих пор:
string line;
int candidateTally;
int voteTally;
ifstream file("votes.txt");
//detect the candidate tally "3"getline(file, line);
candidateTally = atoi(line.c_str());
cout << candidateTally << endl;
//output the candidate tally "10" but it's only outputting "1"getline(file, line);
cout << line;
Я не совсем уверен, как подобрать второй символ для 0, чтобы получить полную строку «10». Кажется, что функция getline обрезается перед получением 0, потому что это может представлять символ ‘\ n’?
Я хотел бы иметь его, чтобы он обнаружил «0» и включил его в строку с «1», чтобы я мог преобразовать это в int, как это должно быть, 10.
Как я могу это исправить?
Спроси себя, что getline
делает … Да, это получает линия.
Таким образом, первый вызов «получает» всю строку «3 10», а второй вызов получает следующая строка в файле : «1»
Вы должны использовать >>
оператор для чтения входящих значений из файла. Это также избавит от необходимости возиться с atoi()
и указатели на символы
Вместо этого используйте следующее:
int candidateTally;
int voteTally;
ifstream file("votes.txt");
//detect the candidate tally "3", and the vote tally "10".
file >> candidateTally >> voteTally;
cout << candidateTally << endl;
cout << voteTally << endl;
operator>>
игнорирует пробелы. Свой первый звонок (file >> candidateTally
) будет «кушать» на «3» и второй звонок (>> votetally
) пропустит пробел, затем наберет «10». Точность можно прочитать Вот, но детали довольно трудно читать.
Если вы собираетесь получить линию для количества кандидатов и голосов, нет смысла использовать atoi
:
std::string line;
int candidateTally;
int voteTally;
std::ifstream file("votes.txt");
if (std::getline(file, line))
{
std::istringstream iss(line);
iss >> candidateTally >> voteTally; // you should also add error handling here
// ...
}
else
{
// handle the error here
}