【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

キーボードから出力した3つの整数について、以下の判定を行い
判定結果を出力するプログラムを作成する。

全部同じ
2つ同じ
バラバラ

* 論理演算子を使わないこと。
* インデントを正しくつけること。

#include<stdio.h>
void main(void)
{
int a,b,c;

printf("a --->");
scanf("%d",$a);
printf("b --->");
scanf("%d",$b);
printf("c --->");
scanf("%d",$c);

if(a==b){
if(b==c){
printf("全部同じ\n");
}
}
else if(a!=b){
if(b==c){
printf("2つ同じ");
}
else if(a==c){
printf("2つ同じ");
}
else{
printf("バラバラ");
}
}
}

最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

A 回答 (4件)

これでどうでしょう?


----------------------------

if(a==b){ // aとbが等しい
 if(b==c){ // aとbとcが等しい
  printf("全部同じ\n");
 }else{ // aとbが等しいがcは等しくない
  printf("2つ同じ\n");
 }
} else { // aとbが等しくない
 if (b==c){ // bとcが等しいがcは等しくない
  printf("2つ同じ\n");
 }else{
  if (a==c){ // aとcが等しいがbは等しくない
   printf("2つ同じ\n");
  }else{ // 全部等しくない。
   printf("バラバラ\n");
  }
 }
}
--------------------------

※このコードはインデントのかわりに全角SPが入ってるのでコピペだとエラーになります。

以前の質問も入れてアドバイスしますと、
仕様に対する処理の論理立ての段階が苦手なようですね。
仕様を満たすには処理と条件を順序立てて考える必要があります。
ロジカル的な考えに慣れるまでフローチャートを書く癖をつけたほうがいいですね。

あと、キーボード、マウスなどのインプットデバイスからPCへ送られる情報は「入力」です。
ディスプレイ、プリンタなどのアウトプットデバイスにPCから送られた情報を表示するのが「出力」です。
    • good
    • 0

http://www.okweb.ne.jp/kotaeru.php3?q=716162
↑こっちは出来ました?

(入力部分は省略)
const char *msg[] = { "バラバラ", "2つ同じ", "", "全部同じ" };
puts(msg[(a==b) + (b==c) + (c==a)]);

# こんなの出したら先生なんて言うやろ。
    • good
    • 0
この回答へのお礼

書き込みありがとうございました。
http://www.okweb.ne.jp/kotaeru.php3?q=716162
はまだ困っています。助けてください。

お礼日時:2003/11/28 11:52

絵で説明しますね。



パターンは
  12345678
A ×○××○○×○
B ××○×○×○○
C ×××○×○○○
の8通りあります。

No.1さんもおっしゃっているように、
if(a==b)
のパターンは上の図の5、8です。
しかし、その中のif文では、8のパターンの処理しかしていません。
その辺りが不具合の原因です。
    • good
    • 0

明らかに

http://oshiete1.goo.ne.jp/kotaeru.php3?q=715805と同じ質問ですよね。
ちょっと気になりましたが、お困りのようなので。。。

私があなたのプログラムを実行したらvoid main(void)でエラーが出たので、最初のvoidをintし、retrun 0をつけました。
scanfは$ではなく&では??
if(a==b)のときif(b==c)とif(b!=c)を考えましょう。
if(a!=b)のときif(a==c)とif(b==c)とif(a!=c)を考えましょう。
if(b==c)のときif(a!=c)を考えましょう。
ほとんど答えなようなものですので、後は自分で考えてください。
これでもわからなければ1つずつifを紙に書き出して考えてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!