Здравствуйте, NordSky, Вы писали:
NS>Здравствуйте, igna, Вы писали:
I>>Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?
Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?
Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?
Вот пример из Стауструпа:
while (cin) {
cin.get(buf,256);
cout << buf;
}
Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
I>Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
I>Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
Поймёте что это фича после копи пасты
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Anchor, Вы писали:
A>Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?
А в чем ты видишь проблему? Состояние потока нужно проверять после операции ввода и можно дополнительно еще и до, чтобы точнее дифференцировать ошибку. Вот обходящийся без предварительной проверки пример из стандартной библиотеки поставляемой с VC9 (реализация istream_iterator):
void _Getval()
{ // get a _Ty value if possibleif (_Myistr != 0 && !(*_Myistr >> _Myval))
_Myistr = 0;
}
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Anchor, Вы писали:
A>>Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?
Идиоматически эта конструкция читается так: "Пока с потоком все в порядке читаем из него что-то там."
Попробуй объяснить, в чём смысл проверять состояние потока, если тебе от него уже ничего не нужно
Здравствуйте, Anchor, Вы писали:
A>Идиоматически эта конструкция читается так: A>"Пока с потоком все в порядке читаем из него что-то там." A>Попробуй объяснить, в чём смысл проверять состояние потока, если тебе от него уже ничего не нужно
На тот случай, если операция чтения была неуспешной.
Здравствуйте, igna, Вы писали:
V>>Поймёте что это фича после копи пасты I>Прошу прощения, не понял фразы. Может быть вместо "поймете" должно быть "поймите"?
Я сказал что хотел. Пару раз вставите неправильную форму, нарвётесь на баги и поймёте.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, igna, Вы писали:
V>>Я сказал что хотел. Пару раз вставите неправильную форму, нарвётесь на баги и поймёте. I>А в каком случае такая форма будет правильной?: I>
I>while (cin) {
I>
Ну когда цикл, к примеру, будет вставлен два раза или cin уже где-то выше покоду процессился, а ты и не заметил.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, igna, Вы писали:
V>>Ну когда цикл, к примеру, будет вставлен два раза I>Куда вставлен? Какой цикл?
Ну что ты никогда копи пастой не пользовался? Да куда угодно!
V>>или cin уже где-то выше покоду процессился, а ты и не заметил. I>Этот случай нужно проверять в if, а не в while.
Ну и тот же самый while-в-начале получишь.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Ну что ты никогда копи пастой не пользовался? Да куда угодно!
Вопрос-то ведь о том, в каком случае будет правильным копируемое:
while (cin) {
То есть оно ведь по твоему мнению может быть корректным в определенном месте и становится некорректным лишь в результате изменения контекста после копирования и вставки, так вот в каком случае оно корректно, можешь привести пример?
Здравствуйте, 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.]
[Даю очевидные ответы на риторические вопросы]