みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【C初心者】+,-,*./について【電卓】

【C初心者】+,-,*./について【電卓】
次のようなプログラミングを作りました。
きちんと実行できるのですが見ての通りややこしいプログラムになってます
#include <stdio.h>

int main(void)
{
int ope;
double n2,n3;
printf("整数1:"); scanf("%lf",&n2);
puts("ADD=0,SUB=1,MUL=2,DIV=3");scanf("%d",&ope);
printf("整数2:"); scanf("%lf",&n3);
switch (ope) {
case 0 : printf("計算すると%fになります.?n",n2+n3); break;
case 1 : printf("計算すると%fになります.?n",n2-n3); break;
case 2 : printf("計算すると%fになります.?n",n2*n3); break;
case 3 : printf("計算すると%fになります.?n",n2/n3); break;
default: printf("計算出来ません.?n"); break;
}
return (0);
}



printf文をcaseの中で5回も使っています
私としては(以下適当です、すいません)


case 0 : sign= + ;break;
case 1 : sign= -



default : 計算できません error=1 ;break;
if (error != 0)
printf("計算すると%fになります.?n",n2 sign n3);


みたいな感じを想像しているのですが
signはintとかcharのどれにしたらよくて
signに"+"をいれて計算させるにはどうしたらいいんでしょう

投稿日時 - 2010-06-04 15:54:25

QNo.5944399

すぐに回答ほしいです

質問者が選んだベストアンサー

"+"、"-"、"*"、"/" 等の「演算子」を変数signに入れて演算させることはできません。
変数に代入できるのは「被演算子」です。

四則演算部分を関数に移動すればmain中で計算結果を出力するprintf を1行にすることはできますが、その関数のなかで switch~case文により分岐することは変わらないですが。
※本質的な違いは無いですが、main中で計算結果を出力するprintfが1行でスッキリ書けるという違いです。

int main{void)
{
  :
double result;
  :
if(error = calc(ope, n2, n3, &result) != 0)
printf(計算すると%fになります.\n",result);
:
:
}

int calc(int w_ope, double w_n2, double w_n3, double *res)
{
int status = 0;

switch (w_ope)
case 0 : res = w_n2 + w_n3); break;
case 1 : res = w_n2 - w_n3); break;
case 2 : res = w_n2 * w_n3); break;
case 3 : res = w_n2 / w_n3); break;
default: status = -1;
}
return status;
}

投稿日時 - 2010-06-04 17:06:13

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

「関数へのポインタの配列」を使えば switch も不要になるけど, どこからどう見ても「初心者」には向かない.

投稿日時 - 2010-06-04 17:29:40

ANo.1

そういう事はできません。
以下のようにする事ならできます。

double ans;

case 0:
ans = n2 + n3;
break;
case 1:
ans = n2 - n3;
break;

...

printf("計算すると%lfになります\n", ans);

投稿日時 - 2010-06-04 16:00:58

あなたにオススメの質問