次の方法で std::cin >> number を使用している間:
float number;
while(std::cin >> number) {
//perform a check here if possible
//if number does not contain a decimal point do this
for(int i = 0; i < number; i++) {
std::cin >> readMoreFloats;
}
//otherwise read 1000 more floats
}
次の種類の行を区別できる方法はありますか:
1.500 (1000 more floats)
2 2.000 2.000
行は float または int で始まります。行が float で始まる場合は、さらに 1000 個の float を読みたいと思います。int ならその数の float を読みたい。float を int にキャストして、キャストされた int が float と等しいかどうかを確認できることはわかっていますが、float が 1.000 などのフラットな値を持つ場合は機能しません。
getline() を使用して行全体を読み取らないことをお勧めします。後で分割すると時間がかかるためです。また、最初の数値を除いてすべての入力が float であることは既にわかっています。もう 1 つの方法は、各行の最初の値を文字列として読み取り、ピリオドが含まれているかどうかを確認することです。最初に入力を文字列として読み取らずに、これを確認する方法はありますか? または、文字列ステップが必要ですか。