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

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

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

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

05.07.2012, 17:40. Просмотров 423. Ответов 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++
C++ Библиотеки ввода вывода.
Манипуляторы ввода/вывода. C++
C++ Операторы ввода и вывода
Операторы ввода вывода C++
Операции ввода и вывода С++ C++
Потоки ввода-вывода C++
C++ Функция ввода / вывода
Перегрузка вывода и ввода C++
C++ Задача на функции ввода-вывода
Манипуляторы ввода/вывода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kent
Нуб со стажем
 Аватар для 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
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 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
Нуб со стажем
 Аватар для 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');
игнорируется вся строка
Yandex
Объявления
05.07.2012, 21:22     Библиотека ввода\вывода. Задача
Ответ Создать тему
Опции темы

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