c++プログラミング練習030:どうしてwhile(cin>>n)が成立したのか本当に分かりますか?
4297 ワード
北京大学プログラム設計とアルゴリズム(三)試験問題まとめ(2020春)
説明
2つの整数を読み込み、-1にぶつかるまで2つの整数を出力します.
複数のグループのデータを入力します.グループごとに1行、2つの整数です.
出力は各グループのデータに対して、そのまま出力入力中に-1が現れた場合、プログラム終了入力中に-1が保証される
サンプル入力12 44 344 555-12 3
サンプル出力12 44 344 555
ソースGuo Wei
ぶんせき
複数回入力するには参照を返す必要があるため、ここでは
説明
2つの整数を読み込み、-1にぶつかるまで2つの整数を出力します.
#include
using namespace std;
class MyCin
{
//
};
int main()
{
MyCin m;
int n1,n2;
while( m >> n1 >> n2)
cout << n1 << " " << n2 << endl;
return 0;
}
複数のグループのデータを入力します.グループごとに1行、2つの整数です.
出力は各グループのデータに対して、そのまま出力入力中に-1が現れた場合、プログラム終了入力中に-1が保証される
サンプル入力12 44 344 555-12 3
サンプル出力12 44 344 555
ソースGuo Wei
ぶんせき
while(cin >> n)
が成立する理由は、入力が完了したときにbool
タイプのfalse
を返し、ループを停止することができるからです.では、()
演算子をリロードしてタイプ変換を行う必要があります.その後、-1で終了し、左がオブジェクトで、右が数値の>>
演算子をリロードする必要があります.class MyCin
{
private:
bool status;
public:
MyCin():status(true){}
MyCin & operator >> (int & n) {
if (!status) return *this;
cin >> n;
if (n == -1) status = false;
return *this;
}
operator bool() { return status; }//
};
複数回入力するには参照を返す必要があるため、ここでは
MyCin & operator >> (int & n)....
です.