無限ループ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 無限ループ

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;
}

Re: 無限ループ

#4

by box » 1年前

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

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;
}
これで一応望んだ結果がでたので、課題は成功です。ありがとうございました。

Re: 無限ループ

#2

by usao » 1年前

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

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

---

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

---

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

無限ループ

#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;の()の中にどのような式を入れたらいいのか分かりません。
教えていただきたいです。

ページトップ