ページ 1 / 1
else文がifと一致しません
Posted: 2013年6月10日(月) 20:09
by ayaco
学校で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);
}
Re: else文がifと一致しません
Posted: 2013年6月10日(月) 20:18
by 超絶右留斗羅天才プログラマー
問題のある部分は、
①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);
}
Re: else文がifと一致しません
Posted: 2013年6月10日(月) 20:23
by conio
最初のif文の後にカッコが無く、不要なセミコロンが付いています。
それが原因です。
まとめると、
----------------------------------------------------------
・if文が { }で囲まれていない ※注1
・インデントが揃っていない
・等しいと判定する部分が、代入になっている。
正: na == nb
誤: na = nb
----------------------------------------------------------
です。
※注1 ・・・ ifの条件によって実行される文が1行だけなら、カッコで囲まなくてもOKです。
ですが、不要なバグの原因になるので、if文によって実行される箇所は
全てカッコで囲むべきだと自分は思います。
Re: else文がifと一致しません
Posted: 2013年6月10日(月) 21:58
by みけCAT
超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
また、課題は「最大値は~」「最小値は~」と表示することでしたよね?
そして、課題で指定されている出力のAとBの解釈が統一されていません。
等しい時はAとBをそのまま用いていますが、等しくないときはAとBに実際の数値が代入されています。
統一したほうがいいのではないでしょうか?
Re: else文がifと一致しません
Posted: 2013年6月10日(月) 22:26
by 超絶右留斗羅天才プログラマー
超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
仰る通りです。
ayako様はコンパイルエラーで悩んでおられるようでしたので、あえてそこはそのままです(*´ω`*)
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 06:41
by ayaco
みけCAT さんが書きました:超絶右留斗羅天才プログラマーさんのプログラムだと、A==Bの時も「大きい方は~」「小さい方は~」が表示されてしまいそうです。
また、課題は「最大値は~」「最小値は~」と表示することでしたよね?
そして、課題で指定されている出力のAとBの解釈が統一されていません。
等しい時はAとBをそのまま用いていますが、等しくないときはAとBに実際の数値が代入されています。
統一したほうがいいのではないでしょうか?
ご指摘ありがとうございます。
A==Bのときの文章を間違えていたようです。
また、統一した方がいいとのことでしたが、先生の指示ですので、
ご了承ください。
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 06:45
by ayaco
[quote="超絶右留斗羅天才プログラマー"]問題のある部分は、
①11行目のif文の括弧の後にセミコロンがついていること
②11行目のif文の条件式に==ではなく=が使われていること
③19行目のelse文の後にifがついていること
です。
丁寧なご指摘ありがとうございます。
指摘の通り修正を加えたところ、コンパイルエラーがなくなりました。
ただ、「A==B」のとき、文章が三つ表示されてしまいます。
このようになってしまう原因はなんでしょうか?
また、「AとBが等しいです」という一文のみ表示するにはどうしたらよいのでしょうか?
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 07:41
by あたっしゅ
>ただ、「A==B」のとき、文章が三つ表示されてしまいます。
>このようになってしまう原因はなんでしょうか?
プログラムが、そう書かれているからです。
求めていることが、書いたプログラムと一致しない、ということは、よくあることです。
コード:
if( na == nb ) {
puts("AとBは等しいです");
} else {
if( na > nb ) {
(中略)
}
printf("大きい方は%dです\n", max);
printf("小さい方は%dです\n", min);
}
今回は、あえて、全部は書きません。
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 12:04
by 超絶右留斗羅天才プログラマー
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);
}
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 12:50
by non
そう作るなら、maxやminはいらないなぁ。
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 13:08
by usao
最も少ない変更で済ますならこうかな?
コード:
if (na == nb){
puts("AとBは等しいです");
return 0; //←コレを追加
}else if (na > nb){
....
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 13:14
by 超絶右留斗羅天才プログラマー
non さんが書きました:そう作るなら、maxやminはいらないなぁ。
仰る通りです。
ayako様は、何故か3行表示されて悩んでおられるようでしたので、あえてそこはそのままです(*´ω`*)
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 13:23
by box
non さんが書きました:そう作るなら、maxやminはいらないなぁ。
全くもってそのとおりです。
maxやminを持ち出したことで、かえってややこしくなってしまっていますね。
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 13:38
by box
要するに、
naとnbが等しければ、「等しい」と出力する。
等しくないとき、naの方が大きければ、「naの方が大きい。nbの方が小さい」と出力する。
上記のいずれにも当てはまらないとき、「nbの方が大きい。naの方が小さい」と出力する。
このロジックを日本語からC言語に翻訳すればOKです。
Re: else文がifと一致しません
Posted: 2013年6月11日(火) 17:07
by ayaco
超絶右留斗羅天才プログラマーさんの一例の通り組んでみたところ、うまく動きました!
まだまだ、if文や複合文についての理解が足りていなかったようです。
皆様のご指摘に、勉強不足を痛感しています。
教えてくださった皆様、本当にありがとうございました!