Страница 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
Сионист писал(а):Каким боком эти скобки к порядку вычисления логики? Избыточные скобки помогают читать и составлять выражения, не тратя времени на вспоминание приоритетов, но ни как не влияют на код.
А я и не говорил, что они влияют на код в данном случае. Я сказал, что они избыточны.

Как по-мне, добавление скобок по каждому чиху, наоборот, делает внешний вид выражения слишком громоздким и, как следствие, ухудшает читабельность. К тому же наличие дополнительных скобок, как правило, говорит о том, что программист хочет изменить стандартный порядок вычисления, и если смены порядка на самом деле не обнаруживается, то это сбивает с толку того, кто читает потом код. Читатель начинает искать где же он просчитался, и тратит на это дополнительное время. И, кстати, порядок вспоминать не нужно, если ты его и так знаешь. А если не знаешь, то правильнее выучить, а не скобки тулить. Вот второй раз уже напарываюсь на твой аргумент, что вспоминать что-то - это плохо. Прошлый раз ты про называние стандартной функции писал то же самое. Неужели я один такой мастодонт программирования, что для меня подобные аргументы дики и смешны? Понимаешь, если пишешь много кода, то знания как о стандартных функциях, так и о порядке вычисления логических выражений, откладываются сами-собой даже без специальной зубрёжки. Тут как бы вывод сам напрашивается :)
Сионист писал(а):Слева на право?
Да, слева направо.