Как получить «строковую строку» в том же объеме, что и «getline (in, line)» в цикле while (getline (...))? - PullRequest
2 голосов
/ 06 июня 2011

Пример:

std::ifstream in("some_file.txt");
std::string line; // must be outside ?
while(getline(in,line)){
  // how to make 'line' only available inside of 'while' ?
}

Циклы Do-while не будут работать для первой итерации:

std::ifstream in("some_fule.txt");

do{
  std::string line;
  // line will be empty on first iteration
}while(getline(in,line));

Конечно, всегда можно иметь if(line.empty()) getline(...), но это не совсем правильно. Я также думал о злоупотреблении оператором запятой:

while(string line, getline(in,line)){
}

но это не сработает, и MSVC говорит, что это потому, что line не конвертируется в bool. Обычно следующая последовательность

statement-1, statement-2, statement-3

должен иметь тип type-of statement-3 (без учета перегруженного operator,). Я не понимаю, почему это не работает. Есть идеи?

Ответы [ 3 ]

6 голосов
/ 06 июня 2011

Вы могли бы немного обмануть и просто сделать лишний блок:

{
    std::string line;
    while (getline(in, line)) {
    }
}

Технически это не "та же самая область", но пока во внешнем блоке больше ничего нет, это эквивалентно.

3 голосов
/ 06 июня 2011

A для цикла будет работать, я делаю это все время:

for (std::string line;
     getline(in,line); )
{
}
2 голосов
/ 06 июня 2011

Вы можете использовать цикл for:

for(std::string line; getline(in, line);) {

}

Хотя я не думаю, что это очень хороший стиль.

...