Как определить «0» в конце строки для текстового файла?

Я сканирую текстовый документ, и он отформатирован так:

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.

Как я могу это исправить?

0

Решение

Спроси себя, что getline делает … Да, это получает линия.

Таким образом, первый вызов «получает» всю строку «3 10», а второй вызов получает следующая строка в файле : «1»

Вы должны использовать >> оператор для чтения входящих значений из файла. Это также избавит от необходимости возиться с atoi() и указатели на символы

6

Другие решения

Вместо этого используйте следующее:

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». Точность можно прочитать Вот, но детали довольно трудно читать.

2

Если вы собираетесь получить линию для количества кандидатов и голосов, нет смысла использовать 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
}
1
По вопросам рекламы [email protected]