無限ループ

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

無限ループ

#1

投稿記事 by ライチ » 1年前

最近C言語を習い始めたものです。
「整数n,m を入力し、nからmまでの整数の総和を出力するプログラムを作成せよ。
プログラム作成に際して、ループ文を用いる場合には、while文による無限ループのみを使用可能とする。」
という課題をもらいました。

コード:

#include <stdio.h>

int main(void)
     int n, m, i=0;
	int kei=0;
		
	while (1) {

		printf("整数nを入力してください:");
		scanf_s("%d", &n);
		printf("整数mを入力してください:");
		scanf_s("%d", &m);

	    if (n<=m)break;
		
		kei = kei + n;
		i++;
	}
	printf("nからmまでの整数の総和は%d\n", kei);
    return 0;
} 

自分が教材にある例題にそって書いたコードです。
代数n, mにどんな数字を入れても総和は0が出力されます。
if()break;の()の中にどのような式を入れたらいいのか分かりません。
教えていただきたいです。

アバター
usao
記事: 1887
登録日時: 11年前

Re: 無限ループ

#2

投稿記事 by usao » 1年前

while(1){ ... }
って書いたら,「...」のところが複数回実行され得る,という点については大丈夫かな?
示されたコードでは入力処理がこの部分に描かれているけど,「nやmを何度も何度も入力しろ」という話には見えないから,まずここの時点で変なことになっていると思うけど.

…という感じで,あなたがどういう処理手順を実装したつもりなのか? というのがそもそも他者には謎なので,ifの条件をどうしたいのか? とかも正直謎.
(間違っているコードだけ示して,そこからあなたの考えを読み取れというのは無理がある)

---

あと,
とりあえず「nからmまで」とかいう言い方から察するに, n<=m みたいな暗黙の前提条件があるのかな? とか思うけど,
「もしも n>m な入力が成された場合にはどうすればいいのか?」っていうのを一切考えなくてもいいのか,それとも何か特別な措置を講じる必要があるのか? 等といった話も必要かもしれない.

---

この内容に対して,自分ならわざわざループを持ち込むことはしないかな.
(1から100までの総和は? とか訊かれたときに,愚直に 1+2+3+... って計算しないっしょ.)

ライチ
記事: 3
登録日時: 1年前

Re: 無限ループ

#3

投稿記事 by ライチ » 1年前

ご指摘ありがとうございます。
よくよく考えるとn, mに整数を複数回入力してもnからmまでの総和が出ないのもその通りで、
よく考えずにcodeを書いていました。
ループ文を使うということに固執していました。
ループ文を使わなければwhile文による無限ループは強制ではないので、使わずに書いてみました。

コード:

#include <stdio.h>

int main(void)
{
	int n,m;
	int kei;
	printf("整数nを入力してください:");
	scanf_s("%d", &n);
	printf("整数mを入力してください:");
	scanf_s("%d", &m);
	
	if (m < n) {
		printf("もう一度入力してください");
	}
	kei = (m - n + 1) * (n + m) / 2;
	printf("nからmまでの整数の総和は%d\n", kei);
    return 0;
}
これで一応望んだ結果がでたので、課題は成功です。ありがとうございました。

box
記事: 2002
登録日時: 13年前

Re: 無限ループ

#4

投稿記事 by box » 1年前

これで一応望んだ結果がでたので、課題は成功
ホントですか?
nからmまでの総和を求めたいということは
n ≦ m
の場合を想定しているんでしょうけど、その条件に反する
n > m
という入力があったとき、if文で再入力を促すメッセージを出力しているにもかかわらず
再入力させるコードがないように見えるのはOKですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ライチ
記事: 3
登録日時: 1年前

Re: 無限ループ

#5

投稿記事 by ライチ » 1年前

ご指摘ありがとうございます。

コード:

#include <stdio.h>

int main(void)
{
	int n,m;
	int kei;
	printf("整数nを入力してください:");
	scanf_s("%d", &n);
	printf("整数mを入力してください:");
	scanf_s("%d", &m);
	
	if (m < n) {
		while (1) {
			printf("もう一度入力してください n:");
			scanf_s("%d", &n);
			printf("もう一度入力してください m:");
			scanf_s("%d", &m);
			if (n <= m)break;
		}
		
	}
	kei = (m - n + 1) * (n + m) / 2;
	printf("nからmまでの整数の総和は%d\n", kei);
    return 0;
}

返信

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