入力の最後まで処理する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cr
記事: 93
登録日時: 8年前

入力の最後まで処理する

#1

投稿記事 by Cr » 8年前

『入力の最後まで処理する』方法が分かりません
AOJの↓を解いています。
http://judge.u-aizu.ac.jp/onlinejudge/d ... 14&lang=jp
『複数のデータセットが与えられます。各データセットには整数 d が一行に与えられます。入力の最後まで処理して下さい。 』
とあるのですが、その方法が分かりません。
今のところコードは以下のようになっています。

コード:

#include <iostream>
using namespace std;
int main(){
	int d;
	int answer;
{	//ここを繰り返したい
	answer = 0;
	cin >> d;
	for(int i = d; i != 600; i += d)
		answer += i*i;
	cout << answer*d << endl;
}
	return 0;
}

アバター
a5ua
記事: 199
登録日時: 9年前

Re: 入力の最後まで処理する

#2

投稿記事 by a5ua » 8年前

入力に失敗するまでループするというコードを書きます。
書き方を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 を使った計算 */
	}
}
(1)では、無限ループの中で、整数dを読み込んだ後、
ストリームの状態をチェックし、エラーが発生していたらループを抜けます。

(2)では、void *への暗黙変換を利用して、入力が失敗するまでループを続けます。
(エラーが発生した場合、nullポインタに変換されるため、結果として条件式はfalseとなります。)

(3)は、C言語のライブラリ関数であるscanfを使った書き方です。

普通は、(2) or (3)の書き方を使うと思います。

アバター
Cr
記事: 93
登録日時: 8年前

Re: 入力の最後まで処理する

#3

投稿記事 by Cr » 8年前

a5uaさん、ありがとうございます。
以下コードでacceptがもらえたので解決とさせていただきます。

コード:

#include <iostream>
using namespace std;
int main(){
	int d;
	int answer = 0;
	while(cin >> d)
	{
		for(int i = d; i != 600; i += d)
			answer += i*i;
		cout << answer*d<<endl;
		answer = 0;
	}
	return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る