|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Сброс флагов потока |
|
C/C++ - Сброс флагов потока
|
Новый участник Сообщения: 29 |
Профиль | Отправить PM | Цитировать Задание.
Напишите функцию, получающую и возвращающую ссылку на объект класса istream. Функция должна читать данные из потока до тех пор, пока не будет достигнут конец файла. Функция должнавыводить прочитанные данные на устройство вывода. Перед возвращением потока верните все её флаги в допустимое состояние. Проверьте созданную функцию, передав ей объект cin в качестве аргумента. (Липпман, Язык программирования С++. Вводный курс. 4-ое издание, Упражнение 8.3, 8.4, стр 317). Вопрос. При вводе цифры или знака конца файла (Ctrl+Z), функция срабатывает как положено. Но при вводе символа, функция бесконечно выдает сообщение об ошибке, хотя должна пропустить итерацию и снова запросить ввод данных. Почему так происходит, в чем ошибка? Заранее спасибо. #include <cstdlib> #include <iostream> #include <istream> using namespace std; istream &funk(istream &mycin){ int ival=0; while (mycin >> ival, !mycin.eof()){ if (mycin.bad()){ cerr << "Error of stream!" << endl; break; } if (mycin.fail()){ cerr << "Bad data, try again\n"; // выводится в бесконечном цикле mycin.clear(istream::failbit); continue; } cout << "You entered " << ival << endl; } mycin.clear(); return mycin; } int main(int argc, char *argv[]){ funk(cin); system("PAUSE"); return EXIT_SUCCESS; } if (mycin.fail()){ cerr << "Bad data, try again\n"; mycin.clear(istream::failbit); // с таким параметром флаг не сбрасывается вообще // если clear() использовать без параметра флаг сбрасывается, // но зацикливание остается if (!mycin.fail()) cout << "Clear" << endl; else cout << "No_clear" << endl; system("pause"); continue; } |
|
Отправлено: 03:19, 27-02-2012 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Перекомпилировал на MS Visual Studio 2010 (до этого DevC++ использовал с его g++). Никаких изменений. Значит, что-то с потоками. Какие могут быть проблемы? Где я что-то недопонял?
|
Отправлено: 15:12, 27-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
xDSL/DialUp - Возможно ли разделить канал на 2 потока? | Parlan | Сетевое оборудование | 2 | 14-01-2012 15:24 | |
C/C++ - [решено] установки флагов формата потоков | bool | Программирование и базы данных | 1 | 02-08-2007 00:11 | |
Монитор+TV и 2 звуковых потока | BlackMonk | Хочу все знать | 6 | 19-10-2004 20:37 | |
Характеристика потока Е1 | Zx | Сетевые технологии | 9 | 25-09-2003 02:46 | |
Ф-ия потока - член класса | Sharkky | Программирование и базы данных | 10 | 10-03-2003 11:52 |
|