Страница 1 из 2
Как поймать невозможность преобразоваия?
Добавлено: 29 авг 2015, 12:26
Сионист
Чего здесь:
Код: Выделить всё
double Result;
std::wstringstream Buffer;
Buffer<<Value;
Buffer>>Result;
return Result;
не хватает, чтоб поймать невозможность преобразования и наличие недопустимых символов?
Re: Как поймать невозможность преобразоваия?
Добавлено: 08 окт 2015, 09:51
Din666
не уверен что на все ситуации но:
Код: Выделить всё
if ( (Buffer>>Result).fail() ) {
// ошибка
}
Re: Как поймать невозможность преобразоваия?
Добавлено: 15 окт 2015, 06:36
Сионист
Не понял. Член fail здесь вообще чей?
Re: Как поймать невозможность преобразоваия?
Добавлено: 15 окт 2015, 09:33
Romeo
Потока, который возвращает оператор >>.
Re: Как поймать невозможность преобразоваия?
Добавлено: 15 окт 2015, 12:07
Сионист
Если хоть часть строки от начала или ведущих пробелов может быть преобразована, то не ловит ни так, ни
Код: Выделить всё
Buffer<<Value;
if (Buffer.fail())
{
// Ошибка
}
else
{
Buffer>>Result;
}
, ни
Код: Выделить всё
if ((Buffer<<Value).fail())
{
// Ошибка
}
else
{
Buffer>>Result;
}
, а преобразвывает эту часть. Можно как то поймать строки вроде "23w", или "13e*3"?
Re: Как поймать невозможность преобразоваия?
Добавлено: 16 окт 2015, 10:04
Сионист
Кажется решил:
Код: Выделить всё
double Result;
std::stringstream Buffer;
std::string Value;
std::string s;
std::cin >> Value;
Buffer << Value;
if (((Buffer>>Result).fail()) || (!(Buffer.eof())))
{
//Ошибка
}
Гарантирован ли здесь порядок вычисления fail и eof?
Re: Как поймать невозможность преобразоваия?
Добавлено: 30 окт 2015, 17:06
Romeo
Гарантирован.
Более того, такое огромное количество скобок попросту излишне: у всех логических операций есть гарантированный порядок вычислений.
Re: Как поймать невозможность преобразоваия?
Добавлено: 01 ноя 2015, 17:03
Сионист
Romeo писал(а):Более того, такое огромное количество скобок попросту излишне: у всех логических операций есть гарантированный порядок вычислений.
Каким боком эти скобки к порядку вычисления логики? Избыточные скобки помогают читать и составлять выражения, не тратя времени на вспоминание приоритетов, но ни как не влияют на код.
Re: Как поймать невозможность преобразоваия?
Добавлено: 01 ноя 2015, 17:06
Сионист
Romeo писал(а):Гарантирован.
Слева на право?
Re: Как поймать невозможность преобразоваия?
Добавлено: 01 ноя 2015, 19:38
Romeo
Сионист писал(а):Каким боком эти скобки к порядку вычисления логики? Избыточные скобки помогают читать и составлять выражения, не тратя времени на вспоминание приоритетов, но ни как не влияют на код.
А я и не говорил, что они влияют на код в данном случае. Я сказал, что они избыточны.
Как по-мне, добавление скобок по каждому чиху, наоборот, делает внешний вид выражения слишком громоздким и, как следствие, ухудшает читабельность. К тому же наличие дополнительных скобок, как правило, говорит о том, что программист хочет изменить стандартный порядок вычисления, и если смены порядка на самом деле не обнаруживается, то это сбивает с толку того, кто читает потом код. Читатель начинает искать где же он просчитался, и тратит на это дополнительное время. И, кстати, порядок вспоминать не нужно, если ты его и так знаешь. А если не знаешь, то правильнее выучить, а не скобки тулить. Вот второй раз уже напарываюсь на твой аргумент, что вспоминать что-то - это плохо. Прошлый раз ты про называние стандартной функции писал то же самое. Неужели я один такой мастодонт программирования, что для меня подобные аргументы дики и смешны? Понимаешь, если пишешь много кода, то знания как о стандартных функциях, так и о порядке вычисления логических выражений, откладываются сами-собой даже без специальной зубрёжки. Тут как бы вывод сам напрашивается
Сионист писал(а):Слева на право?
Да, слева направо.