この問題を示す簡単なプログラムです。予想通り数値の後に続く「文字列のような」値が印刷されると無視されるのはなぜですか?
#include <iostream>
using namespace std;
double d;
int main() {
cin >> d;
if (cin.fail()) {
cout << "Input is invalid" << endl;
}
else {
cout << d << endl;
}
return (0);
}
Input is invalid
adsfasdf
又は[email protected]#$!*@#(&Adf
プリントのような値を入力します。 13.52
のような数値を入力すると、期待通りに13.52
が返されます。
しかし数字で始まり、文字列に続くもの、例えば13.52asdfasdf!#@[email protected]#$!#A
などを入力すると、13.52
が表示されます。だから、なぜそのような入力は印刷されませんInput is invalid
?
数字部分を印刷するのではなく、この入力を無効として扱うにはどうすればよいですか?
これは 'cin'が動作する方法です。詳細はマニュアルを読んでください。それはあなたが必要としているものを最高のものを読んで、将来の読書のために残そうとします。入力バリデータとしてそのまま使用するようには設計されていません。行全体を文字列として読み込み、自分で検証することができます。 –
いつものように、データを文字列として読み込み、そこから検証します。 – NathanOliver
_ **入力** _の定義は何ですか?すべて連続した文字(スペース区切りではない)ですか?もしそうなら、 'double d; cin >> d; 'と' std :: string input; std :: cin >> input; 'そして、あなたの基準** _に合っているかどうかを調べるために解析します。 –