C++ の stream 入力で末尾にゴミが入ってるかどうかを確認する
Twitter でツッコまれたんですが、例えば以下のように std::stringstream
を使った場合はエラーになりません。
#include <iostream> #include <sstream> int main() { // 末尾にゴミがある std::stringstream str("123x"); int x; str >> x; std::cout << x << std::endl; // => 123 }
[末尾にゴミが残ってるかの確認]
#include <iostream> #include <sstream> int main() { std::stringstream str("123x"); int x; str >> x; if( str.get() == std::char_traits<char>::eof() ){ std::cout << x << std::endl; } else{ std::cout << "Bad input." << std::endl; } } /* output: Bad input. */
これで一応ゴミが残ってるかどうかを確認することはできます。