Форум программистов, компьютерный форум, киберфорум
Наши страницы

Помогите с getline - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать класс матрица Данный класс содержит http://www.cyberforum.ru/cpp-beginners/thread384515.html
Создать класс матрица Данный класс содержит указатель на long, размер строк и столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром и конструктор с двумя...
C++ Ceмма чётных и нечётных чисел Вычислить сумму чётных и сумму не чётных чисел натурального ряда то 1 до n. Вот что получается. Программа работает, но не верно. int main() {int n, s1=0, s2=0; cin >> n; for (int i=1;... http://www.cyberforum.ru/cpp-beginners/thread384506.html
C++ помогите с snmp
Привет всем, Использую библиотеку snmp.h, пишу на visual studio 2010, как с помощью запроса (например SnmpMgrRequest) узнать какая версия snmp у агента?? в интернете ничего нормального найти не...
C++ найти сумму чисел, расположенных перед первым минимальным.
Помогите пожалуйста. Как найти сумму чисел, расположенных перед первым минимальным. ??? Не получается. Понимаю, что нужно использовать цикл, но как именно? Очень жду вашей помощи, хотя бы совета.
C++ Перевод строки при записи в файл http://www.cyberforum.ru/cpp-beginners/thread384480.html
Почему при выводе на экран оператор endl; переводит строку на новую, а при записи в файл не переводит, а печатает всё в строчку ? const int rowD = 9, columnD = 4;//Размер преобразованного...
C++ Непонятное поведение sscanf(.., "%lf", ..) Здравствуйте все! Столкнулся с такой проблемой: читаю строку из трех вещественных чисел - 18.4, 5.05, 1.015; смотрю значение value - а там вместо 18.4 - 18.399999999.... Подскажите пожалуйста,... подробнее

Показать сообщение отдельно
dg91
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 4
15.11.2011, 23:09  [ТС]
Net_Wanderer
спасибо, в вашем варианте зацикливания не происходит. Оно и понятно. Строки getline не читает, => цикл завершается.
Но мне было непонятно, почему не происходит дальнейшее чтение файла?
То есть при прочтении строки, следующей за строкой длины большей, чем (buffLen - 1), функция возвращает 0. Почему?

Разобрался, найдя более полную документацию по классу ifstream.

Оказывается, в случае недостаточной длины буфера функция getline выставляет внутренний флаг ios::failbit. Сбросить его можно с помощью метода clear().

Все=)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int buffLen = 10;
char* buff = new char[buffLen];
while(!finp.eof())
{
  finp.getline(buff, buffLen);
  MessageBox(hWnd, buff, "Показываем строку", MB_OK);
  ios::iostate i;
  i = finp.rdstate();
  if(i & ios::failbit)
  {
    MessageBox(hWnd, "Выставлен бит поправимой ошибки", "Бит установлен", MB_OK);
    //сбрасываем этот бит
    finp.clear();
  }
  if(!(i & ios::failbit))
  {
    MessageBox(hWnd, "Бит поправимой ошибки был сброшен", "Бит сброшен", MB_OK);
  }
}
delete[] buff;
правда, мессаджБоксы появляются не совсем в том порядке, в котором я думал, что они будут появляться...Но само считывание из файла теперь абсолютно корректно. Если честно, мессаджБоксы появляются в каком-то вообще адском порядке...но это уже другой вопрос. Разберусь.
Всем удачи! Спасибо форуму
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru