私はstdinから(巨大な)入力ストリームを受け取り、フロートのベクトルに読み込むソフトウェアを書いています。私は、ストリームにコンマのような文字が入っていて、それを受け入れることができないか、単に浮動小数点として解析できないものをすべて無視したいと考えています。私は、次の行動に気づいた:私はcinの動作を理解しようとしています
#include <iostream>
using std::endl;
using std::cin;
using std::cout;
int main (int argc, const char* argv[]){
float val;
while (cin) {
cin >> val;
cout << val << endl;
}
return 0;
}
プリント
このバージョンながら#include <iostream>
using std::endl;
using std::cin;
using std::cout;
int main (int argc, const char* argv[]){
float val;
while (cin >> val) {
cout << val << endl;
}
return 0;
}
プリント
1.4
このバージョン
echo "1.4, -0.7 890 23e-3" | ./cintest
を呼び出すときコンマなし
1.4
0
、最初の1枚の版画
1.4
-0.7
890
0.023
秒1枚のプリントが
1.4
-0.7
890
0.023
0.023
誰かがここで起こっているかを説明してもらえながら?
iOSストリームのcinを使用せず、lookahead/tokenizingパーサーを記述してください。 –
最初のバージョンは正しく、2番目のバージョンは間違っています。 –
'cin >> floatVar;'は '、'(浮動小数点ではない)を読むことができないので、 '0'を返します(ループを終了します)。 – crashmstr