
ご閲覧頂き、ありがとうございます。
初心者プログラマです。
昨日、案を思い立ち、ボォーっとした冴えない頭をフル稼働させて、
(頭が痛いのです。)
頑張って作りました。
昨日まで、(VisualStudio使ってます)デバッグエラーなどに
悩まされていましたが、
今日、色々手直しすることで、エラーは解消されました。
然し、今日気づいた事が有ります。
このようなプログラムです。
/*-------------------------------------------------------------------------*/
#include <stdio.h>
#include <math.h>
int main() {
int m = 0;
int a = 0;
int b = 0;
int c = 0;
double d = 0;
printf("このプログラムは、三平方の定理\n");
printf(" / | \n");
printf(" c / | \n");
printf(" / |a \n");
printf(" / | \n");
printf("  ̄ ̄ ̄ ̄ ̄ \n");
printf(" 底辺b \n");
printf("が、a^2*b^2=c^2である \n");
printf("ことを利用した、三角形の辺を \n");
printf("計算するアプリケーションです \n");
printf("どちらを計算しますか? \n");
printf("1 = 斜辺cを計算する。 \n");
printf("2 = 底辺bを計算する。 \n");
printf("3 = aを計算する。 \n");
printf("入力して下さい > ");
while ((m = getchar()) != '\n') {
if(m = '1') {
printf("\n aの値を入力して下さい。 >");
scanf_s("%d", &a);
printf("\n bの値を入力して下さい。 >");
scanf_s("%d", &b);
c = (a*a) + (b*b);
printf("\n計算結果\n");
printf("%d×%d=%dなので、\n", a, b, c);
printf("答えは√%d(%f)となる。", c, sqrt(c));
}
else if(m = '2') {
printf("\n aの値を入力して下さい。 >");
scanf_s("%d", &a);
printf("\n cの値を入力して下さい。 >");
scanf_s("%d", &c);
b = (a*a) - (c*c);
printf("\n計算結果\n");
printf("%d×%d=%dなので、\n", a, c, b);
printf("答えは√%d(%f)となる。", b, sqrt(c));
}
else if(m = '3') {
printf("\n cの値を入力して下さい。 >");
scanf_s("%d", &c);
printf("\n bの値を入力して下さい。 >");
scanf_s("%d", &b);
a = (c*c) - (b*b);
printf("\n計算結果\n");
printf("%d×%d=%dなので、\n", c, b, a);
printf("答えは√%d(%f)となる。", a, sqrt(a));
}
}
return 0;
}
/*------------------------------------------------------------------------------*/
昨日まで、whileは使わず、ifとelse ifだけを使っていましたが、
僕が教科書としているプログラムの本を見る限り、if文の構成より、
while文のほうが作りやすいのかなと思い、その本を丸パクリし、
書き上げました。
然し、
コンパイル後、
入力して下さい >
と表示されたあと、1か2か3と入力したら、
if文の構成を見たらわかるかと思いますが、
1と入力すると、普通に斜辺cの計算をしますが、
2と入力しても、3と入力しても、1と同じように、
aの値を入力してください >
と
bの値を入力してください >
と出てしまいます。
1,2,3、どれも違うプログラムにしたいです。
プログラムの書き方がおかしいのかもしれませんが、
どうか、ご回答、宜しくお願いします。
No.4
- 回答日時:
本題とは無関係ですが, 「if文の構成より、while文のほうが作りやすい」ってどういうことなんでしょうか.
if と switch で悩むことはあるし実際質問の状況だとどっちにしようか考えるけど, 「if にするか while にするかを検討する」って状況が想像できない.
ご回答、有り難う御座います。
あっっっっ(゜ロ゜;
違うんです。
僕の教科書にしている本に、似たようなプログラムがあったんです。
それでは、while文を使っていて、教科書と同じにした方が、書きやすいと思ったのです。
そして、書き間違えました。
大改造前に、
Scanf_sを使っていたのですが、while文に変更したんです。
そうだ。忘れてた。
本当に、文を間違えてしまい、申し訳ありませんでした。
そして、ご回答、本当にありがとうございます。
これからも、プログラマになれるように、頑張ります!!
No.3
- 回答日時:
>そうなんですね、if(m = 1)は、1を代入するんですね。
>そりゃ、すべて1の場合になりますよね。
1を代入するから1の場合になる。
とはちょっと違うのでご注意を。
# '1'と1では違うが本質はそこではないので。
条件式の記述の仕方から、「最初の判定が真になった」だけです。
やっぱり既に指摘されていますが、コンパイル時に警告として表示されていませんでしたか?
警告レベルを上げるオプション指定していれば今時のコンパイラなら警告出ていると思いますが。
ちなみに、こういう誤りを回避するために右辺と左辺を置き換える。という手もあります。
if('1' == m) {
ならエラーにはなりませんが
if('1' = m) {
ならばコンパイルエラーですので。
# コーディング規約とかで認めない場合や、推奨している場合などまちまちですけどね。
勘違いしていたみたいですね。申し訳ありません。
やっぱり、かなり勉強不足ですね。
もっと勉強して、Wr5さんのような、素晴らしい人になろうと思います。
No.2
- 回答日時:
まぁ既に回答付いているので対処はできるでしょうが……
なぜ
>2と入力しても、3と入力しても、1と同じように、
となるのか…について説明(?)でもしてみましょうかね。
>if(m = '1') {
で、mの値に関わらず'1'を代入します。
んで、代入式の評価として真が返されます。
ということでこの条件式は常に真となります。
http://www.bohyoh.com/CandCPP/FAQ/FAQ00021.html
ご回答、ありがとうございます。
自分が恥ずかしいです。
実は、受験明けで、プログラムを書くのが久しぶりだったものですから、忘れていました。
もう、自分の馬鹿、、、
そうなんですね、if(m = 1)は、1を代入するんですね。
そりゃ、すべて1の場合になりますよね。
もっと、勉強して、これから、頑張って行きたいと思います。
ご回答、本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPU温度・負荷等を調べるには
-
C言語プログラミング 漸化式に...
-
既約分数の表示プログラム
-
摂氏の値を計算するプログラム...
-
すごろくに使用するサイコロ
-
Cプログラム
-
printf()文の書式
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
プログラムでの数字につく”f”の...
-
「Aに対するBの割合」と「Aに対...
-
C++のfor文について
-
変数とパラメータとは違うもの...
-
C言語のプログラミングですが、
-
LNK2019:未解決の外部シンボル ...
-
main.c:7:43: warning: implici...
-
For文の終了値を関数にしても問...
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
Cプログラムについて
-
コマンドラインに出力した文字...
-
WM_CLOSEで閉じれないウィンド...
-
C言語の&に関する質問
-
すごろくに使用するサイコロ
-
文字と数字の判定について
-
printf( " %2d", p * q );
-
【C言語教えてください】sin波...
-
%P と %X の違い
-
C言語の勉強しています。すみま...
-
strcmp
-
c言語でAからZまでを表示する...
-
unsigned int型について
-
(C言語)めちゃくちゃな値にな...
-
printf で二進表示を行いたい。
-
プログラミング C言語 課題でプ...
-
c言語で2000年以降カレンダーを...
おすすめ情報