どこの処理がおかしいのでしょうか?

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

どこの処理がおかしいのでしょうか?

#1

投稿記事 by ぽにょ » 16年前

スイマセン、また質問させて下さい
「10個の0以上の整数値を入力し、その中の最大値と最小値を表示。」はうまくいったのですが

「その後一つの正の整数値nを入力しn番目に入力された値を表示
また、その値が最大値か最小値の場合はその旨をひょうじすることを繰り返し行う
負の整数値が入力されたらプログラムを終了する。(←これはその後の整数値nを入力した時の終了条件)

ここの処理がうまくいかなかくて悩んでいます。
恐らく処理の位置がおかしいと思うですが・・・
続き
for(;(flag==0);)                /*フラグが0の間ループ*/
{
scanf("%d",&n);                 /*整数値入力*/
if(n<=0)flag=1                   /*負の整数が入力されたら*/
{
printf("負の整数が入力されたので終了\n");
}
else if(n>10)          /*nに入力で10以上だったら*/
{
printf("にゅうりょくされた数値では表示できません\n");
}
printf("%d\n",a[n-1]);             /*n番目に入力された値*/
if(a[n-1])==max)                   /*値が最大値だったら*/
{
printf("この値は最大値です\n");
}
if(a[n-1])==min)                  /*値が最小値だったら*/
{
printf("この値は最小値です\n");
}
}
return 0;
}
変なコードでスイマセンがよろしくお願いします。

non

Re:どこの処理がおかしいのでしょうか?

#2

投稿記事 by non » 16年前

> for(;(flag==0);) /*フラグが0の間ループ*/
> {
> scanf("%d",&n); /*整数値入力*/
> if(n<=0)flag=1 /*負の整数が入力されたら*/
flag=1の場所は下の{}の中
> {
> printf("負の整数が入力されたので終了\n");
> }
> else if(n>10)          /*nに入力で10以上だったら*/
> {
> printf("にゅうりょくされた数値では表示できません\n");
このままだと、下の実行をするので、continue;する
> }
> printf("%d\n",a[n-1]); /*n番目に入力された値*/
> if(a[n-1])==max) /*値が最大値だったら*/
()が対応していない
> {
> printf("この値は最大値です\n");
> }
> if(a[n-1])==min) /*値が最小値だったら*/
()が対応していない
> {
> printf("この値は最小値です\n");
> }
> }
> return 0;
> }
> 変なコードでスイマセンがよろしくお願いします。
>

バグ

Re:どこの処理がおかしいのでしょうか?

#3

投稿記事 by バグ » 16年前

とりあえず、コンパイルエラーくらいは潰しましょう。
まず、負数の判定を行おうとしているであろうif文は明らかにおかしいですよね?
flagの値を代入している箇所もさることながら、n <= 0という判定式では、0が入力されても負数とみなされてしまいます。
これをやりたいならば…

if (n <= 0) flag = 1
{
	printf("負の整数が入力されたので終了\n");
}

下記のように修正しましょう。

if (n < 0)
{
	flag = 1;
	printf("負の整数が入力されたので終了\n");
}
ただ、nの値は-1して、配列のインデックスとして使いたいようですので、ifブロックを下記のように修正されてはどうでしょうか?
if (n < 0) /* 負数の判定 */
{
	flag = 1;
	printf("負の整数が入力されたので終了\n");
}
else if(n >= 1 && n <= 10) /* 入力値が1~10ならば表示 */
{
	printf("%d番目に入力された数値は%dです\n", n, a[n - 1]);

	if (a[n - 1] == max)
	{
		printf("この値は最大値です\n");
	}
	else if(a[n - 1] == min)
	{
		printf("この値は最小値です\n");
	}
}
else
{
	printf("入力された数値では表示できません\n");
}

ぽにょ

Re:どこの処理がおかしいのでしょうか?

#4

投稿記事 by ぽにょ » 16年前

フラグを立てる場所と判定が間違っていたのですね、ありがとうございます。
()すらなかったとか・・・そりゃエラーもでますよね。
バグさんのコード、参考にさせて頂きます。
本当にありがとうございました。

閉鎖

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