アプリ版:「スタンプのみでお礼する」機能のリリースについて

【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に"+"をいれて計算させるにはどうしたらいいんでしょう

A 回答 (3件)

"+"、"-"、"*"、"/" 等の「演算子」を変数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;
}
    • good
    • 0

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

    • good
    • 0

そういう事はできません。


以下のようにする事ならできます。

double ans;

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

...

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

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