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

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

Восстановить пароль Регистрация
 
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
05.07.2012, 17:40     Библиотека ввода\вывода. Задача #1
Напишите функцию, получающую и возвращающую ссылку на объект класса 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++ Библиотеки ввода вывода.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Библиотека ввода\вывода. Задача
Ответ Создать тему
Опции темы

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