Использование игнорировать, чтобы пропустить одну или две строки

0

Я пытаюсь пропустить первую строку из входного файла и, возможно, вторую строку.

    //Ignore first line, second if begins with #
in.ignore(256, '\n');
char c = in.peek();
if(c == '#') 
    in.ignore(256, '\n');

//read in all nums, including x, y, gs
while(in >> num) {
    pic.push_back(num);
}

Моя проблема заключается в том, что ничто не возвращается в pic. Правильно ли я игнорирую?

  • 0
    Вы используете 256 как магическое число, но это не так. Магическое число, указывающее, что столько символов, сколько необходимо пропустить, является std::nimeric_limits<std::streamsize>::max() .
  • 0
    Вы могли бы получить лучшие альтернативы, если бы вы показали нам свой поток ввода (содержимое файла)
Теги:

1 ответ

0

Я проверил ваш код в двух случаях.

  1. Первая строка короче 256 символов. В этом случае он работает по-разному.
  2. Первая строка длиннее 256 символов. В этом случае он ломается.

Однако, используя исправление, предложенное DietmarKuhl, код больше не ломается:

#include <iostream>
#include <limits>

using namespace std;
int main(){
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    char c = cin.peek();
    if(c == '#') 
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    int num;

    //read in all nums, including x, y, gs
    while(cin >> num) {
        cout << num << endl;;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню