Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

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

11.01.2013, 04:56. Просмотров 1988. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 04:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объект cin и класс istream (C++):

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

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

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

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

объект cin - C++
Добрый день. скажите как попасть в ретерн, если поток идет с консоли? if(!cin.get(ch)) return curr_tok = END;

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

3
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
11.01.2013, 07:36 #2
ПРошу прощения, не туда написал.
0
Kastaneda
Jesus loves me
Эксперт С++
4688 / 2892 / 236
Регистрация: 12.12.2009
Сообщений: 7,353
Записей в блоге: 2
Завершенные тесты: 1
11.01.2013, 08:36 #3
Вводим 123qwe123, выполнятся будет так:
- прочитали 123, вывели 123
- прочитали q, это не int, поток "сломался", поэтому в тело while даже не зайдет.
- выполнили то, что после while

т.е. условие цикла нужно изменить.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 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
11.01.2013, 14:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 14:45
Привет! Вот еще темы с ответами:

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

Предопределенный объект cin - C++
В классе iostream перегружена операция приведения объекта к типу bool? int x; while (cin &gt;&gt; x) ...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync - C++
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод. Не пойму предназначение cin.get() !=...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear() - C++
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....


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

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

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