
No.5ベストアンサー
- 回答日時:
初の回答投稿です(汗
こんな感じではいかがですか??
#include <stdio.h>
void main( void )
{
int a[3];
for ( int i=0; i<3; i++ ){
printf("%d番目入力:", i+1);
scanf("%d", &a[i]);
}
if( a[0] == a[1] && a[0] == a[2] && a[1] == a[2] ){
printf("3つ等しい\n");
} else if ( a[0] == a[1] || a[0] == a[2] || a[1] == a[2] ){
printf("2つ等だけしい\n");
} else {
printf("全部違う\n");
}
}
かなり強引ですが・・・
No.12
- 回答日時:
#8です。
#9~#11さん、いろいろ調べていただいてありがとうございます。
一応ちゃんとK&R本で確認してから書いたんですけどね、ANSI準拠の第2版でしたので。。。たしかに、ANSI-C策定前がどうだったかまでは確認してませんでした。
とはいえ、もともと比較演算が真の場合の値は1と決まっていたっぽいですけど、、、規格に厳密にしたがってないコンパイラがあっても当たり前ですからね。用心するに越したことはないですね。
、、、脱線して、質問者さまにはちょっと難しい話になってしまいましたね。お分かりにならなければひとまず読み流してくださいませ。
No.11
- 回答日時:
ANo.9さらに補足です。
aとbが等しいときa==bの値は「ANSI-C」ではintの1が返りますね。規格書はそうなってました。
昔、-1を返すようなコードをはくコンパイラがいたような記憶があって。。。今でも用心してしまいます。
No.10
- 回答日時:
ANo.9補足です。
メッセージ表示ではなかったんですね。
void (*func[4])(void) = {func1,func2,NULL,func3};
と関数ポインタの配列を使って、
func[((a==b)?1:0)+((b==c)?1:0)+((c==a)?1:0)]();
としましょう。
No.9
- 回答日時:
ANo.8さんの回答ですが、aとbが等しいときa==bが1を返すかどうかは処理系依存だと思います。
確実にするには、((a==b)?1:0)+((b==c)?1:0)+((c==a)?1:0)
のように書いた方がいいでしょう。
さらに、
char *mes[4]={"3つ異なる","2つだけ等しい","","3つ等しい"};
としておいて、
printf("%s\n",mes[
((a==b)?1:0)+((b==c)?1:0)+((c==a)?1:0)]);
という手もあります。
No.8
- 回答日時:
少し変わった方法を紹介します。
3つの値が入っているのがそれぞれ a,b,c とした場合
switch ( ( a == b ) + ( b == c ) + ( c == a ) ) {
case 3:
/* 3つとも等しい */
break ;
case 1:
/* 2つが等しい */
break ;
case 0:
/* すべて異なる */
break ;
default:
/* ありえない */
break ;
}
なぜこれでよいのか考えてみると、勉強になると思います。
他にもいろいろな方法があると思いますが、、、3つしかないのにわざわざソートまでしてやるのは非常に無駄だと思います。
No.7
- 回答日時:
mk7193hsさん、ご指摘ありがとうございます。
私もそこがなんとなく曖昧だったんです。
やっぱり普通に&&演算子を使えば良かったですね。
よく考えれば、
(a == b && b == c)
で全部等しいですね。
何を勘違いしたのか、
(a == b && b == c && c == a)
と言う長いのを考えてしまって、
長すぎて嫌だな~。
こうしたら短くならないかな~?
なんて都合の良いこと考えてしまいました。
ごめんなさい。
No.6
- 回答日時:
mk7193hsです。
my_namae_ue様へ
ソートが出来る技術をお持ちの方なら、このような質問はこないと思います。
ac-sakura様へ
if(a == b == c)では、3つが等しいことにはなりません。
No.4
- 回答日時:
補足要求です。
> つくりたいんですけどどうにもつくれません。
"つくれない"というのは、どのような状況ですか?
(a) 3つの数字が与えられたとき、それらが、「3つ等しい」のか、「2つだけ等しい」のか、「3つ異なる」のかを判定する方法が分からない。(プログラミングではなく、あくまで判定する手順という意味においてです。)
(b) 判定する方法は分かるのだが、それをどのようにc言語のコードにするのか分からない。
どちらのレベルで分からないかによって、回答の内容も変わります。
No.3
- 回答日時:
3つの整数をa,b,cとすると
if(a == b && b == c)
{
/* 3つ等しい処理 */
}
else
if(a == b || b == c || c == a)
{
/* 2つ等しい処理 */
}
else
{
/* 3つ異なる処理 */
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング 2つの整数を読み込んで、等しければ 「二つの値は同じです」と表示し、そうでなければ, 4 2023/05/15 16:03
- C言語・C++・C# プログラミング 2つの整数を読み込んで、等しければ 「二つの値は同じです」と表示し、そうでなければ, 5 2023/05/17 12:55
- 数学 整数問題7 3文字の整数問題 5 2023/04/09 09:56
- Java Java 南京錠 2 2023/02/04 11:46
- 数学 nは正の整数であり、偶数。 n(n+1)(n+2)(n+3)は素因数が3つ。 nを求めよ。 という問 8 2022/09/26 18:15
- 数学 【圏論】モノイドにおける恒等射について 8 2022/06/09 23:52
- 数学 x-2<x+1/3 という不等式は全ての実数xについて成り立ちますよね? 例えばx=0を代入したとき 3 2022/03/29 23:48
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- IT・エンジニアリング 21歳の大学3年男です。 現在プログラミングを習得できるところに入ろうか悩んでます。 そのスクールは 3 2022/06/21 00:43
- バス・高速バス・夜行バス WILLERでバスの予約を3人分しようとしたのですが、3人とも微妙に値段が違いました。 どうして値段 1 2022/12/18 02:24
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語で2000年以降カレンダーを...
-
c言語でAからZまでを表示する...
-
【C】fizzbuzzのトリッキーなコ...
-
strcmp
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
コマンドラインに出力した文字...
-
8人分のテストの点数を入力し、...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
(C言語)めちゃくちゃな値にな...
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
コマンドプロンプトがすぐ消える
-
printfの出力内の文字をdefine...
-
scanfに文字が入力されたときに...
-
台形の面積を求めるプログラム
-
改行について 1行に何個かづ...
-
WM_CLOSEで閉じれないウィンド...
おすすめ情報