Re[2]: while (in) {
От: Anchor  
Дата: 15.12.10 18:48
Оценка: +1
Здравствуйте, NordSky, Вы писали:

NS>Здравствуйте, igna, Вы писали:


I>>Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?


Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?
while (in) {
От: igna Россия  
Дата: 15.12.10 15:56
Оценка:
Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?

Вот пример из Стауструпа:

while (cin) {
    cin.get(buf,256);
    cout << buf;
}


Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
Re: while (in) {
От: NordSky Россия  
Дата: 15.12.10 16:05
Оценка:
Здравствуйте, igna, Вы писали:

I>Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?


I>Вот пример из Стауструпа:


I>
I>while (cin) {
I>    cin.get(buf,256);
I>    cout << buf;
I>}
I>


I>Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?


по-моему здесь нет ошибок
Re: while (in) {
От: Vain Россия google.ru
Дата: 15.12.10 19:34
Оценка:
Здравствуйте, igna, Вы писали:

I>Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?

I>Вот пример из Стауструпа:
I>
I>while (cin) {
I>    cin.get(buf,256);
I>    cout << buf;
I>}
I>

I>Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
Поймёте что это фича после копи пасты
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: while (in) {
От: igna Россия  
Дата: 16.12.10 11:33
Оценка:
Здравствуйте, Anchor, Вы писали:

A>Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?


А в чем ты видишь проблему? Состояние потока нужно проверять после операции ввода и можно дополнительно еще и до, чтобы точнее дифференцировать ошибку. Вот обходящийся без предварительной проверки пример из стандартной библиотеки поставляемой с VC9 (реализация istream_iterator):


    void _Getval()
        {    // get a _Ty value if possible
        if (_Myistr != 0 && !(*_Myistr >> _Myval))
            _Myistr = 0;
        }
Re[4]: while (in) {
От: Anchor  
Дата: 16.12.10 14:04
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Anchor, Вы писали:


A>>Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?


Идиоматически эта конструкция читается так:
"Пока с потоком все в порядке читаем из него что-то там."
Попробуй объяснить, в чём смысл проверять состояние потока, если тебе от него уже ничего не нужно
Re[5]: while (in) {
От: igna Россия  
Дата: 16.12.10 14:22
Оценка:
Здравствуйте, Anchor, Вы писали:

A>Идиоматически эта конструкция читается так:

A>"Пока с потоком все в порядке читаем из него что-то там."
A>Попробуй объяснить, в чём смысл проверять состояние потока, если тебе от него уже ничего не нужно

На тот случай, если операция чтения была неуспешной.
Re[2]: while (in) {
От: igna Россия  
Дата: 18.12.10 09:17
Оценка:
Здравствуйте, NordSky, Вы писали:

NS>по-моему здесь нет ошибок


По крайней мере здесь есть ошибка, про которую написал Страуструп: забыли прочитать '\n', вследствии чего будет введена только первая строка.
Re[2]: while (in) {
От: igna Россия  
Дата: 22.12.10 08:03
Оценка:
Здравствуйте, Vain, Вы писали:

V>Поймёте что это фича после копи пасты


Прошу прощения, не понял фразы. Может быть вместо "поймете" должно быть "поймите"?
Re[3]: while (in) {
От: Vain Россия google.ru
Дата: 22.12.10 21:58
Оценка:
Здравствуйте, igna, Вы писали:

V>>Поймёте что это фича после копи пасты

I>Прошу прощения, не понял фразы. Может быть вместо "поймете" должно быть "поймите"?
Я сказал что хотел. Пару раз вставите неправильную форму, нарвётесь на баги и поймёте.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: while (in) {
От: igna Россия  
Дата: 23.12.10 06:42
Оценка:
Здравствуйте, Vain, Вы писали:

V>Я сказал что хотел. Пару раз вставите неправильную форму, нарвётесь на баги и поймёте.


А в каком случае такая форма будет правильной?:

while (cin) {
Re[5]: while (in) {
От: Vain Россия google.ru
Дата: 23.12.10 12:58
Оценка:
Здравствуйте, igna, Вы писали:

V>>Я сказал что хотел. Пару раз вставите неправильную форму, нарвётесь на баги и поймёте.

I>А в каком случае такая форма будет правильной?:
I>
I>while (cin) {
I>

Ну когда цикл, к примеру, будет вставлен два раза или cin уже где-то выше покоду процессился, а ты и не заметил.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: while (in) {
От: igna Россия  
Дата: 23.12.10 13:01
Оценка:
Здравствуйте, Vain, Вы писали:

V>Ну когда цикл, к примеру, будет вставлен два раза


Куда вставлен? Какой цикл?

V>или cin уже где-то выше покоду процессился, а ты и не заметил.


Этот случай нужно проверять в if, а не в while.
Re[7]: while (in) {
От: Vain Россия google.ru
Дата: 23.12.10 16:46
Оценка:
Здравствуйте, igna, Вы писали:

V>>Ну когда цикл, к примеру, будет вставлен два раза

I>Куда вставлен? Какой цикл?
Ну что ты никогда копи пастой не пользовался? Да куда угодно!

V>>или cin уже где-то выше покоду процессился, а ты и не заметил.

I>Этот случай нужно проверять в if, а не в while.
Ну и тот же самый while-в-начале получишь.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[8]: while (in) {
От: igna Россия  
Дата: 24.12.10 08:37
Оценка:
Здравствуйте, Vain, Вы писали:

V>Ну что ты никогда копи пастой не пользовался? Да куда угодно!


Вопрос-то ведь о том, в каком случае будет правильным копируемое:

while (cin) {


То есть оно ведь по твоему мнению может быть корректным в определенном месте и становится некорректным лишь в результате изменения контекста после копирования и вставки, так вот в каком случае оно корректно, можешь привести пример?
Re[9]: while (in) {
От: Vain Россия google.ru
Дата: 24.12.10 13:57
Оценка:
Здравствуйте, igna, Вы писали:

V>>Ну что ты никогда копи пастой не пользовался? Да куда угодно!

I>Вопрос-то ведь о том, в каком случае будет правильным копируемое:
I>
I>while (cin) {
I>

I>То есть оно ведь по твоему мнению может быть корректным в определенном месте и становится некорректным лишь в результате изменения контекста после копирования и вставки, так вот в каком случае оно корректно, можешь привести пример?
Ты понял ровно наоборот
do {} while(cin);

Вот это то и может стать неккоректным посли копи пасты в отличии от этого:
while(cin) {}
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[10]: while (in) {
От: igna Россия  
Дата: 24.12.10 14:54
Оценка:
Здравствуйте, Vain, Вы писали:

V>Вот это то и может стать неккоректным посли копи пасты в отличии от этого:

V>while(cin) {}


Допустим я утверждаю, что не может быть корректной программа, содержащая следующую строку:

while (cin) {


Опровергнуть можешь?
Re[11]: while (in) {
От: Vain Россия google.ru
Дата: 24.12.10 17:29
Оценка:
Здравствуйте, igna, Вы писали:

V>>Вот это то и может стать неккоректным посли копи пасты в отличии от этого:

I>
V>>while(cin) {}
I>

I>Допустим я утверждаю, что не может быть корректной программа, содержащая следующую строку:
I>
I>while (cin) {
I>

I>Опровергнуть можешь?
Вы хотите чтобы я условия опровергал? Вас унесло куда-то не туда
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: while (in) {
От: tasko  
Дата: 24.12.10 19:24
Оценка:
Здравствуйте, igna, Вы писали:

I>Этот случай нужно проверять в if, а не в while.


вы предлагаете

if(cin){
do{
//...
}while(cin);
}

я правильно вас понимаю?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.