AOJでの入出力メモ C++

AOJで問題を解くときに入出力の仕方を時間が開くと忘れちゃうのでメモ

入力の終わりまで処理する時

入力の終わりまで処理や、EOFまでといった場合です。AOJの問題はこのタプの入力が多そうです。
次の書き方で入力を取れます。

int a;
while(cin>>a){
    //処理;
}

EOFの時にループから抜けます。

たまに入力の終わりが0みたいな問題もありますがそういう場合は次のようにすればよい。

int a;
while(cin>>a&&a){
}

複数の入力

スペースで区切られた以下のような複数の入力

10 13

こういう場合は

while(cin>>a>>b){
}

こんなかんじで

文字列

文字列の入力はスペースのところまでとる場合は

string s;
cin>>s;

1行取る場合はgetline関数を使います。

string s;
getline(cin,s);

カンマで区切られてる時

5,3
6,4
1,6

こんなかんじの時です。
cin行を文字列としてとって1文字目と3文字目を数値に変換して読み取るとかすればできるかもしれませんがscanfを使うと楽です。

int a,b;
scanf("%d,%d",&a,&b);

桁数が決まった出力をする時

coutでも桁数の指定ができると思いますが、なんかうまくできなかったので、printfを使った方法を書いておきます。
少数第3位まで出力したい場合は以下の様にします。

printf("%.3f %.3f\n",a,b);

整数部分の桁数を指定したい場合は

printf("%3d",a);

と言った感じです。
ちなみにprintfで制度指定した場合は四捨五入されるようです。
coutを使った方法は結構めんどくさそうなので気が向いたらまたメモすると思います。