{float}{single-letter-identifier}たとえば15.6E、またはのフォームの入力を受け入れたいプロジェクトに取り組んでい10Wます。
これを行うには、入力文字列を取得し、最後の文字を削除してから、を使用して浮動小数点数に変換できるかどうかを確認できると思いましたstd::stof。これはブロックにネストされ、try-catch無効な入力をユーザーに通知できるようになります。
ここでのSTLのオープンスタンダード(653ページ)は、次のように述べていますstd::stof。
invalid_argumentwcstodまたはwcstoldが、変換を実行できなかったと報告した場合。
ただし、変換できないものが渡された場合はスローされません"48East"。この動作を再現するためのコードサンプルを以下に示します。
std::wstring szString = L"48East";
try{
float f = std::stof(szString);
} catch( ... )
{
std::cout << "test" << std::endl;
}
これは、MSVC10でデバッグモードでコンパイルされて/Odいるため、呼び出しが最適化されていないと想定しています。
助けていただければ幸いです(または、仕様をどこで誤解/誤解したかについてのガイダンスです!)。