Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?
Вот пример из Стауструпа:
while (cin) {
cin.get(buf,256);
cout << buf;
}
Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
I>Пример этот должен иллюстрировать другую ошибку (здесь забыли прочитать '\n'), но про проверку условия цикла ничего не говориться. Или что, в ошибочной программе можно делать другие ошибки, они ей уже не повредят?
Здравствуйте, NordSky, Вы писали:
NS>Здравствуйте, igna, Вы писали:
I>>Какой смысл проверять состояние потока ввода (только) до выполнения операции ввода?
Какой смысл выполнять операцию ввода, предварительно не проверив состояние потока?
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.]
[Даю очевидные ответы на риторические вопросы]