『入力の最後まで処理する』方法が分かりません
AOJの↓を解いています。
http://judge.u-aizu.ac.jp/onlinejudge/d ... 14&lang=jp
『複数のデータセットが与えられます。各データセットには整数 d が一行に与えられます。入力の最後まで処理して下さい。 』
とあるのですが、その方法が分かりません。
今のところコードは以下のようになっています。
入力の最後まで処理する
Re: 入力の最後まで処理する
入力に失敗するまでループするというコードを書きます。
書き方を3通り紹介します。
(1)では、無限ループの中で、整数dを読み込んだ後、
ストリームの状態をチェックし、エラーが発生していたらループを抜けます。
(2)では、void *への暗黙変換を利用して、入力が失敗するまでループを続けます。
(エラーが発生した場合、nullポインタに変換されるため、結果として条件式はfalseとなります。)
(3)は、C言語のライブラリ関数であるscanfを使った書き方です。
普通は、(2) or (3)の書き方を使うと思います。
書き方を3通り紹介します。
#include <iostream>
using namespace std;
int main()
{
int d;
// (1)
for (;;) {
cin >> d;
if (cin.fail()) break;
/* d を使った計算 */
}
// (2)
while (cin >> d) {
/* d を使った計算 */
}
// (3)
while (scanf("%d", &d) != EOF) {
/* d を使った計算 */
}
}
ストリームの状態をチェックし、エラーが発生していたらループを抜けます。
(2)では、void *への暗黙変換を利用して、入力が失敗するまでループを続けます。
(エラーが発生した場合、nullポインタに変換されるため、結果として条件式はfalseとなります。)
(3)は、C言語のライブラリ関数であるscanfを使った書き方です。
普通は、(2) or (3)の書き方を使うと思います。