Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

Библиотека ввода\вывода. Задача - C++

05.07.2012, 17:40. Просмотров 437. Ответов 3
Метки нет (Все метки)

Напишите функцию, получающую и возвращающую ссылку на объект класса istream. Функция должна читать данные из потока до тех пор, пока не будет достигнут конец файла. Функция должнавыводить прочитанные данные на устройство вывода. Перед возвращением потока верните все её флаги в допустимое состояние. Проверьте созданную функцию, передав ей объект cin в качестве аргумента.


происходит зацикливание(строка 12), если ввести неправильные данные
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
 
std::istream& f(std::istream& me){
    int ival(0);    
    while (me >> ival, !me.eof()) {
        if (me.bad()) {
            throw std::runtime_error("IO stream corrupted");        
        }
        if (me.fail()) {
            std::cerr << "bad data, try again";
            me.clear(std::istream::failbit);
            continue;
        }
    }
    return me;
}
 
int main() {
    f(std::cin);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2012, 17:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Библиотека ввода\вывода. Задача (C++):

Библиотека потокового ввода/вывода - C++
А верно ли, что данная библиотека является вещью абсолютно бесполезной для Windows-программирования и в настояящее время используется...

Библиотека потокового ввода-вывода и контейнерные классы.Дешифровка - C++
Задание:Создать функцию, которая расшифровывает зашифрованный файл на основании файла- ключа. Функция принимает в качестве параметров...

Задача на функции ввода-вывода - C++
Мне дали разработать программу, но я не понимаю как. Вот условие: В бинарном файле находятся числа. Разработать программу, которая...

Операции ввода и вывода С++ - C++
Необходимо продемонстрировать операции &lt;&lt; и &gt;&gt; для ввода и вывода типов char, int, float, double для какого-либо значения

Поток ввода-вывода - C++
#include &lt;iostream&gt; using namespace std; int main() { int i; while(true) { if(cin&gt;&gt;i)

Библиотеки ввода вывода. - C++
Доброе утро! Есть задача: Дан файл с текстом. Проверить, сколько раз в тексте встречается какой-либо отрезок ряда 0123456789 длины не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kent
Нуб со стажем
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
05.07.2012, 19:38 #2
вот так работает:
C++
1
2
3
4
5
6
if(me.fail()){
    std::cett<<"bad data, try again";
    me.clear();
    me.ignore(256,'\n');
    continue;
}
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
05.07.2012, 19:50  [ТС] #3
Цитата Сообщение от kent Посмотреть сообщение
вот так работает:
C++
1
2
3
4
5
6
if(me.fail()){
    std::cett<<"bad data, try again";
    me.clear();
    me.ignore(256,'\n');
    continue;
}
спасибо
объясни только
me.ignore(256,'\n');
kent
Нуб со стажем
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
05.07.2012, 21:22 #4
C++
1
istream& std::istream::ignore ( streamsize n = 1, int delim = EOF );
считывает, но ни где не хранит, максимум n символов, пока не встретит delim. Когда происходит попытка считать из потока ошибочные символы, эти символы остаются в потоке, поэтому происходит зацикливание. С помощью
C++
1
me.ignore(256,'\n');
игнорируется вся строка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 21:22
Привет! Вот еще темы с ответами:

Потоки ввода вывода - C++
Почему с помощью классов ostream и istream нельзя создавать свои потоки ввода вывода? std::ostream output; output &lt;&lt; &quot;String&quot;; К...

Операторы ввода и вывода - C++
Допустим есть класс class Checked { public: private: double id; int *beg; std::pair&lt;std::strin, std::strin&gt;...

Манипулятор ввода / вывода - C++
Чем отличается манипулятор ввода\вывода от пользовательский ввод\вывод ?

Переопределение ввода / вывода - C++
Структура «абонент телефонной сети» содержит следующие поля: 1) фамилия (строка), 2) ули-ца, 3) дом, 4) квартира, 5) тел. номер....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.07.2012, 21:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru