Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

Объект cin и класс istream

11.01.2013, 04:56. Показов 3298. Ответов 3
Метки нет (Все метки)

В учебнике приводиться такое задание:
"Напишите функцию, получающую и возвращающую ссылку на объект класса istream. Фукнция должна читать данные из потока до тех пор, пока не будет достигнут конец файла. Функция должна выводить прочитанные данные на стандартное устройство вывода. Перед возвращением потока, верните все значения его флагов в допустимое состояние. Проверьте созданную функцию, передав ей при вызове объект cin в качестве аргумента ".
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdexcept>
#include <istream>
#include <iostream>
 
using namespace std;
 
istream &myfunc(istream &arg);
 
int main()
{
myfunc(cin);
 
return 0; 
}
 
istream &myfunc(istream &arg)
{
    register int i;
    istream::iostate old_state;
 
    old_state = arg.rdstate();
    cin.clear();
    while (arg >> i && !arg.eof()) {
        if (arg.bad())
            throw runtime_error("IO stream corrupted");
        if (arg.fail()) {
            cerr << "bad data, try again";
            arg.clear(istream::failbit);
            continue;
        }
        cout << i; 
    }
    cin.clear();
    cin.clear(old_state); 
 
    return arg; 
}
У меня вопрос: "Почему если во время выполнения функции ввести: 123abc456, то во время передачи в
C++
1
2
3
4
 if (arg.fail()) {
            cerr << "bad data, try again";
            arg.clear(istream::failbit);
            continue;
то цикл обрывается? (а не передаётся инструкции continue на продолжение цикла, как задумано)

Добавлено через 7 минут
т.е. результат вывода будет: 123 вместо 123456
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2013, 04:56
Ответы с готовыми решениями:

Не работает getline(cin,s), istream.ignore()
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться...

Объект cin и его метод cin.get()
Вот код программы: #include &lt;iostream.h&gt; #pragma hdrstop ...

Как работает объект istream?
Есть кусок кода istream &amp; operator&gt;&gt;(istream &amp; is, String &amp; st) { char temp; is.get(temp,...

тип cout-a ostrieam? соответствено тип cin-a istream?
тип cout-a ostrieam? соответствено тип cin-a istream?

3
17 / 17 / 10
Регистрация: 14.06.2012
Сообщений: 151
11.01.2013, 07:36 2
ПРошу прощения, не туда написал.
0
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,974
Записей в блоге: 2
11.01.2013, 08:36 3
Вводим 123qwe123, выполнятся будет так:
- прочитали 123, вывели 123
- прочитали q, это не int, поток "сломался", поэтому в тело while даже не зайдет.
- выполнили то, что после while

т.е. условие цикла нужно изменить.
0
интересующийся
309 / 280 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
11.01.2013, 14:45  [ТС] 4
Тогда зачем нужна эта ниструкция? В учебнике как раз она и исользуется...

Добавлено через 2 часа 14 минут
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
if (arg.fail()) { cerr << "bad data, try again"; arg.clear(istream::failbit); continue;
Я об этом
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2013, 14:45

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Разница между istream::putback и istream::unget
Можете объяснить, пожалуйста, разницу этих двух функций?

Объект cin
Читаю книгу и встретил такой кусок кода: for(int i =0;i&lt;ArSize;i++) { cout&lt;&lt;i+1&lt;&lt;&quot;:...

Объект cin
Как сделать так,чтобы после cin шла строка,например есть строка cout &lt;&lt; &quot;Enter your height in futs...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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