ご閲覧頂き、ありがとうございます。
初心者プログラマです。
昨日、案を思い立ち、ボォーっとした冴えない頭をフル稼働させて、
(頭が痛いのです。)
頑張って作りました。
昨日まで、(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.2
- 回答日時:
まぁ既に回答付いているので対処はできるでしょうが……
なぜ
>2と入力しても、3と入力しても、1と同じように、
となるのか…について説明(?)でもしてみましょうかね。
>if(m = '1') {
で、mの値に関わらず'1'を代入します。
んで、代入式の評価として真が返されます。
ということでこの条件式は常に真となります。
http://www.bohyoh.com/CandCPP/FAQ/FAQ00021.html
ご回答、ありがとうございます。
自分が恥ずかしいです。
実は、受験明けで、プログラムを書くのが久しぶりだったものですから、忘れていました。
もう、自分の馬鹿、、、
そうなんですね、if(m = 1)は、1を代入するんですね。
そりゃ、すべて1の場合になりますよね。
もっと、勉強して、これから、頑張って行きたいと思います。
ご回答、本当にありがとうございました。
No.3
- 回答日時:
>そうなんですね、if(m = 1)は、1を代入するんですね。
>そりゃ、すべて1の場合になりますよね。
1を代入するから1の場合になる。
とはちょっと違うのでご注意を。
# '1'と1では違うが本質はそこではないので。
条件式の記述の仕方から、「最初の判定が真になった」だけです。
やっぱり既に指摘されていますが、コンパイル時に警告として表示されていませんでしたか?
警告レベルを上げるオプション指定していれば今時のコンパイラなら警告出ていると思いますが。
ちなみに、こういう誤りを回避するために右辺と左辺を置き換える。という手もあります。
if('1' == m) {
ならエラーにはなりませんが
if('1' = m) {
ならばコンパイルエラーですので。
# コーディング規約とかで認めない場合や、推奨している場合などまちまちですけどね。
勘違いしていたみたいですね。申し訳ありません。
やっぱり、かなり勉強不足ですね。
もっと勉強して、Wr5さんのような、素晴らしい人になろうと思います。
No.4
- 回答日時:
本題とは無関係ですが, 「if文の構成より、while文のほうが作りやすい」ってどういうことなんでしょうか.
if と switch で悩むことはあるし実際質問の状況だとどっちにしようか考えるけど, 「if にするか while にするかを検討する」って状況が想像できない.
ご回答、有り難う御座います。
あっっっっ(゜ロ゜;
違うんです。
僕の教科書にしている本に、似たようなプログラムがあったんです。
それでは、while文を使っていて、教科書と同じにした方が、書きやすいと思ったのです。
そして、書き間違えました。
大改造前に、
Scanf_sを使っていたのですが、while文に変更したんです。
そうだ。忘れてた。
本当に、文を間違えてしまい、申し訳ありませんでした。
そして、ご回答、本当にありがとうございます。
これからも、プログラマになれるように、頑張ります!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コマンドプロンプトがすぐ消える
-
C言語で四則演算を使って結果が...
-
CTRL+Dでループを抜けるには
-
switch分のケースを範囲数?に...
-
文字と数字の判定について
-
unsigned int型について
-
C言語で、「自然数nを入力し、n...
-
getcharの連続について
-
入力したお金の金額からお札の...
-
8人分のテストの点数を入力し、...
-
int型 00 を表示するのに0とな...
-
C言語で 選択肢: |?| |?| |?| 1...
-
数当てゲームを作っているのですが
-
【プログラム】2の倍数で表示非...
-
アドレスの比較について
-
C言語プログラミングで「コマン...
-
C言語の数値入力
-
改行について 1行に何個かづ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報