if文の使い方について

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

if文の使い方について

#1

投稿記事 by せっちゃん » 16年前

こんにちわ
私はif文を習ったので、試しにポケモンのステータスを計算するというプログラムを作っていました。
けれども何処が間違っているのかわからなくなってしまいました。
多分if文の{}の使い方が間違っていると思うんですが・・・
御教授願えたらうれしいです。

以下ソース
#include <stdio.h>

main()
{
	float a, b, c, d, e, f, g, h;

	
	printf("ステータスを計算します。\n");
	printf("HPの場合は1を、それ以外なら2と入力してください---->");
	scanf_s("%f", &a);
	if(a == 1 )
		printf("種族値を入力してください---->");
	    scanf_s("%f", &b);
	    printf("個体値を入力してください---->");
	    scanf_s("%f", &c);
	    printf("努力値を入力してください---->");
	    scanf_s("%f", &d);
        printf("レベルを入力してください---->");
	    scanf_s("%f", &e);
			f=(a*2+b+c/4)*d/100+d+10;
		printf("このポケモンのHPは「%f」です\n", f);
	

    (24) else if(a == 2 ){
		printf("種族値を入力してください---->");
	    scanf_s("%f", &b);
	    printf("個体値を入力してください---->");
	    scanf_s("%f", &c);
	    printf("努力値を入力してください---->");
	    scanf_s("%f", &d);
        printf("レベルを入力してください---->");
	    scanf_s("%f", &e);
		printf("性格補正を入力してください---->");
	    scanf_s("%f", &g);
	}
		if(g == 1.1){
			h=((a*2+b+c/4)*d/100+5)*g;
			printf("このポケモンのステータスは「%f」です。\n", h);
		}
		else if(g == 0.9){
			h=((a*2+b+c/4)*d/100+5)*g;
		    printf("このポケモンのステータスは「%f」です。\n", h);
		}
		else{
			printf("入力した数が間違っています。\n");
		    printf("このプログラムを終了します。\n");
			return(0);
	}
       (49)   else{
		printf("入力した数が間違っています。\n");
	    printf("このプログラムを終了します。\n");

		return(0);
	}



	return(0);

}
エラーメッセージは(24) : error C2181: else 文が if と一致しません。
         (49) : error C2181: else 文が if と一致しません。

使っているコンパイラはVC++ 2008です。
分かりにくかったらごめんなさい。

s-rush

Re:if文の使い方について

#2

投稿記事 by s-rush » 16年前

1つ目のif文に{}が使われていないことが原因ですね。
if(a == 1 )
		printf("種族値を入力してください---->");  ←if文によって実行されるブロックが終了してます。
/*********以下は(elseまで)if文とは無関係になってます**************/
	    scanf_s("%f", &b);
	    printf("個体値を入力してください---->");
このため、24行目のelseに対して、前に続くif文がないために、if文と対応していません。

以下のように{}を入れてあげればエラーは取れるはずです。
if(a == 1 )
[color=red>{[/color]
		printf("種族値を入力してください---->");
	    scanf_s("%f", &b);
	    printf("個体値を入力してください---->");
	    scanf_s("%f", &c);
	    printf("努力値を入力してください---->");
	    scanf_s("%f", &d);
        printf("レベルを入力してください---->");
	    scanf_s("%f", &e);
			f=(a*2+b+c/4)*d/100+d+10;
		printf("このポケモンのHPは「%f」です\n", f);
[color=red>}[/color]
あとは49行目のエラーも同じようなものです。
1つ前のelse文が}で閉じられていないことが原因です。

toyo

Re:if文の使い方について

#3

投稿記事 by toyo » 16年前

自動でインデントされたのを無理やり修正してませんか
Visual C++は{ }に対応して自動でインデントされます
段落がずれたように見えた場合は修正する前に{ }の書き忘れを疑いましょう

s-rush

Re:if文の使い方について

#4

投稿記事 by s-rush » 16年前

補足です。
if文もそうですが、elseやfor文でプログラムを書く際には
中のブロックの処理を書き始める前に先に
{ }で囲っておく癖をつけておいた方がいいでしょう。

今回の場合、if文以下にelseがあったので、エラーとして出てきましたが、
else文を使用してさらに条件分岐をしない場合、文法的には問題ありません。
しかし、その状態でプログラムを実行したとしても、望んだ動作はまずされません。
バグのもととなってしまいますので、
[color=red>if forなど→{ }で囲む[/color]
ということを習慣づけしておきましょう。

せっちゃん

Re:if文の使い方について

#5

投稿記事 by せっちゃん » 16年前

>>toyoさん
ご指導ありがとうございます。
見栄えが悪くてつい修正してしまう癖があるみたいですorz
今度からは気を付けたいと思います。

>>s-rudhさん
お陰さまで問題無くコンパイルされました!
今後からはif forなどの文は{}で囲む癖を付けていきたいと思います。
ご指導ありがとうございました。

閉鎖

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