else文がifと一致しません

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

else文がifと一致しません

#1

投稿記事 by ayaco » 11年前

学校でif文と複合文まで教わりました。

二つの整数A,Bを入力し、

A=Bならば、「AとBは等しいです」

A>Bならば、「最大値はAです」
         「最小値はBです」

A<Bならば、「最大値はBです」
         「最小値はAです」

と表示するプログラムの課題が出ました。

教わった範囲でプログラムを組んだのですが、「c2181 : else文がifと一致しません」とエラーが出てしまいます。
参考書などでできる限り調べ、修正を加えましたが、エラーがなくなりません。
そのため、今回質問させていただきました。よろしくお願いします。

コード:

#include <stdio.h>

int main (void)
{
    int na, nb, max, min;

    puts("二つの整数を入力してください。");
    printf("A:");    scanf("%d", &na);
    printf("B:");    scanf("%d", &nb);
	
    if (na = nb);
       puts("AとBは等しいです");
    
    else if (na > nb){
        max = na;
        min = nb;
}
	
    else if {
        max = nb;
	min = na;
}
    printf("大きい方は%dです\n", max);
    printf("小さい方は%dです\n", min);



    return (0);
}


超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: else文がifと一致しません

#2

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

問題のある部分は、
①11行目のif文の括弧の後にセミコロンがついていること
②11行目のif文の条件式に==ではなく=が使われていること
③19行目のelse文の後にifがついていること
です。

以下のようにすることで動くようになります(*´▽`*)

コード:

#include<stdio.h>
int main (void)
{
    int na, nb, max, min;
 
    puts("二つの整数を入力してください。");
    printf("A:");    scanf("%d", &na);
    printf("B:");    scanf("%d", &nb);
    
    if (na == nb){
       puts("AとBは等しいです");
	}else if (na > nb){
        max = na;
        min = nb;
	}else{
        max = nb;
	    min = na;
	}
    printf("大きい方は%dです\n", max);
    printf("小さい方は%dです\n", min);
    return (0);
}
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

conio
記事: 9
登録日時: 12年前
連絡を取る:

Re: else文がifと一致しません

#3

投稿記事 by conio » 11年前

最初のif文の後にカッコが無く、不要なセミコロンが付いています。
それが原因です。

まとめると、
----------------------------------------------------------
・if文が { }で囲まれていない   ※注1
・インデントが揃っていない
・等しいと判定する部分が、代入になっている。
正: na == nb
誤: na = nb
----------------------------------------------------------
です。

※注1 ・・・ ifの条件によって実行される文が1行だけなら、カッコで囲まなくてもOKです。
        ですが、不要なバグの原因になるので、if文によって実行される箇所は
        全てカッコで囲むべきだと自分は思います。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: else文がifと一致しません

#4

投稿記事 by みけCAT » 11年前

超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
また、課題は「最大値は~」「最小値は~」と表示することでしたよね?
そして、課題で指定されている出力のAとBの解釈が統一されていません。
等しい時はAとBをそのまま用いていますが、等しくないときはAとBに実際の数値が代入されています。
統一したほうがいいのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: else文がifと一致しません

#5

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
仰る通りです。
ayako様はコンパイルエラーで悩んでおられるようでしたので、あえてそこはそのままです(*´ω`*)
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

ayaco
記事: 4
登録日時: 11年前

Re: else文がifと一致しません

#6

投稿記事 by ayaco » 11年前

みけCAT さんが書きました:超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
また、課題は「最大値は~」「最小値は~」と表示することでしたよね?
そして、課題で指定されている出力のAとBの解釈が統一されていません。
等しい時はAとBをそのまま用いていますが、等しくないときはAとBに実際の数値が代入されています。
統一したほうがいいのではないでしょうか?

ご指摘ありがとうございます。
A==Bのときの文章を間違えていたようです。
また、統一した方がいいとのことでしたが、先生の指示ですので、
ご了承ください。

ayaco
記事: 4
登録日時: 11年前

Re: else文がifと一致しません

#7

投稿記事 by ayaco » 11年前

[quote="超絶右留斗羅天才プログラマー"]問題のある部分は、
①11行目のif文の括弧の後にセミコロンがついていること
②11行目のif文の条件式に==ではなく=が使われていること
③19行目のelse文の後にifがついていること
です。



丁寧なご指摘ありがとうございます。
指摘の通り修正を加えたところ、コンパイルエラーがなくなりました。

ただ、「A==B」のとき、文章が三つ表示されてしまいます。
このようになってしまう原因はなんでしょうか?
また、「AとBが等しいです」という一文のみ表示するにはどうしたらよいのでしょうか?

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: else文がifと一致しません

#8

投稿記事 by あたっしゅ » 11年前

>ただ、「A==B」のとき、文章が三つ表示されてしまいます。
>このようになってしまう原因はなんでしょうか?

プログラムが、そう書かれているからです。
求めていることが、書いたプログラムと一致しない、ということは、よくあることです。

コード:

if( na == nb ) {
	puts("AとBは等しいです");
} else {
	if( na > nb ) {
(中略)
	}
	printf("大きい方は%dです\n", max);
	printf("小さい方は%dです\n", min);
}
今回は、あえて、全部は書きません。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: else文がifと一致しません

#9

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

ayaco さんが書きました:ただ、「A==B」のとき、文章が三つ表示されてしまいます。
このようになってしまう原因はなんでしょうか?
また、「AとBが等しいです」という一文のみ表示するにはどうしたらよいのでしょうか?
エラーが取れたみたいで良かったです(*´▽`*)
はい、19行目と20行目のprintfが必ず通るので、値が等しい場合に3行表示されます。
やり方は思いついたものでも3パターンほどあるのですが、一例を紹介します。

値が等しい場合のみその2行が表示されないようにしました。

コード:

#include<stdio.h>
int main (void)
{
    int na, nb, max, min;
 
    puts("二つの整数を入力してください。");
    printf("A:");    scanf("%d", &na);
    printf("B:");    scanf("%d", &nb);
    
    if (na == nb){
       puts("AとBは等しいです");
    }else if (na > nb){
        max = na;
        min = nb;
        printf("大きい方は%dです\n", max);
        printf("小さい方は%dです\n", min);
    }else{
        max = nb;
        min = na;
        printf("大きい方は%dです\n", max);
        printf("小さい方は%dです\n", min);
    }
    return (0);
}
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

non
記事: 1097
登録日時: 13年前

Re: else文がifと一致しません

#10

投稿記事 by non » 11年前

そう作るなら、maxやminはいらないなぁ。
non

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

Re: else文がifと一致しません

#11

投稿記事 by usao » 11年前

最も少ない変更で済ますならこうかな?

コード:

if (na == nb){
    puts("AとBは等しいです");
    return 0;  //←コレを追加
}else if (na > nb){
    ....

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 11年前

Re: else文がifと一致しません

#12

投稿記事 by 超絶右留斗羅天才プログラマー » 11年前

non さんが書きました:そう作るなら、maxやminはいらないなぁ。
仰る通りです。
ayako様は、何故か3行表示されて悩んでおられるようでしたので、あえてそこはそのままです(*´ω`*)
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

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

Re: else文がifと一致しません

#13

投稿記事 by box » 11年前

non さんが書きました:そう作るなら、maxやminはいらないなぁ。
全くもってそのとおりです。
maxやminを持ち出したことで、かえってややこしくなってしまっていますね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: else文がifと一致しません

#14

投稿記事 by box » 11年前

要するに、
naとnbが等しければ、「等しい」と出力する。
等しくないとき、naの方が大きければ、「naの方が大きい。nbの方が小さい」と出力する。
上記のいずれにも当てはまらないとき、「nbの方が大きい。naの方が小さい」と出力する。

このロジックを日本語からC言語に翻訳すればOKです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

ayaco
記事: 4
登録日時: 11年前

Re: else文がifと一致しません

#15

投稿記事 by ayaco » 11年前

超絶右留斗羅天才プログラマーさんの一例の通り組んでみたところ、うまく動きました!
まだまだ、if文や複合文についての理解が足りていなかったようです。
皆様のご指摘に、勉強不足を痛感しています。

教えてくださった皆様、本当にありがとうございました!

閉鎖

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