Читать файл построчно с конкретными данными C ++ - PullRequest
0 голосов
/ 08 мая 2018

У меня есть файл в этом формате:

11
1 0
2 8 0
3 8 0
4 5 10 0
5 8 0
6 1 3 0
7 5 0
8 11 0
9 6 0
10 5 7 0
11 0

Первая строка - это количество строк, поэтому я могу сделать цикл для чтения файла с количеством строк. Для других строк я бы хотел построчно читать файл и сохранять данные до тех пор, пока не получу «0» в строке, поэтому в конце каждой строки стоит 0. Первый столбец - это имя задачи. Остальные столбцы - это имя ограничения.

Я пытался что-то кодировать, но, похоже, это не работает

printf("Constraints :\n");
for (int t = 1; t <= numberofTasks; t++) 
{
    F >> currentTask;
    printf("%c\t", currentTask);
    F >> currentConstraint;
    while (currentConstraint != '0') 
    {
        printf("%c", currentConstraint);
        F >> currentConstraint;
    };
    printf("\n");
};

«0» обозначает конец ограничений для задачи.

Я думаю, что мой код не работает должным образом, потому что ограничение 10 для задачи 4 также содержит "0".

Заранее спасибо за помощь

Привет

1 Ответ

0 голосов
/ 09 мая 2018

Проблема в том, что вы читаете отдельные символы из файла, не читаете целые числа или даже построчно. Измените переменные currentTask и currentConstraint на int вместо char и используйте std::getline() для чтения строк, из которых вы затем читаете целые числа.

Попробуйте это:

F >> numberofTasks;
F.ignore();

std::cout << "Constraints :" << std::endl;
for (int t = 1; t <= numberofTasks; ++t) 
{
    std::string line;
    if (!std::getline(F, line)) break;

    std::istringstream iss(line);

    iss >> currentTask;
    std::cout << currentTask << "\t";

    while ((iss >> currentConstraint) && (currentConstraint != 0))
    {
        std::cout << currentConstraint << " ";
    }

    std::cout << std::endl;
}

Демонстрационная версия

При этом завершающий 0 в каждой строке не нужен. std::getline() прекратит чтение, когда достигнет конца строки, а operator>> прекратит чтение, когда достигнет конца потока.

Демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...