Как игнорировать пробел внизу файла? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть файл с данными о животных, я читаю каждую строку и обрабатываю информацию в своих массивах структур, но проблема в том, что в нижней части файла с животными есть место (и я не могу просто удалить его), поэтому, когда яобработайте цикл while, он включает в себя строку с пробелом.Любая помощь будет отличной!Также мой файл выглядит так: AnimalName: AnimalType: RegoNumber: ProblemNumber.

while (!infile.eof()) {
    getline(infile, ani[i].animalName, ':');
    getline(infile, ani[i].animalType, ':');
    getline(infile, str, ':');
    ani[i].Registration = stoi(str);
    getline(infile, str, '.');
    ani[i].Problem=stoi(str);
    cout << "Animal added: " << ani[i].Registration << " " << ani[i].animalName << endl;
    AnimalCount++;
    i++;
}

1 Ответ

2 голосов
/ 05 апреля 2019

Если строка содержит только один пробел, можете ли вы проверить его длину (должна быть 1) и равен ли он пробелу?

Если такая строка обнаружена, просто разорвите цикл.

#include <iostream>
#include <fstream>

int main(void) {
    std::ifstream infile("thefile.txt");
    std::string line;

    while(std::getline(infile, line)) {
        std::cout << "Line length is: " << line.length() << '\n';
        if (line.length() == 1 && line[0] == ' ') {
           std::cout << "I've detected an empty line!\n";
           break;
        }
        std::cout  << "The line says: " << line << '\n';
    }
    return 0;
}

Для тестового файла (вторая строка содержит один пробел):

hello world

end

выходной сигнал, как и ожидалось:

Line length is: 11
The line says: hello world
Line length is: 1
I've detected an empty line!
...