質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.01%

  • C

    3069questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C言語についての質問

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 191

kakakaaka

score 11

c言語
このプログラムを動かし足し算~割り算をしたいのですが、動きません。
どこが悪いのか、ここはこうしたほうがいいというところを教えてください。

include <stdio.h>

float calc(char op, float a, float b);

main(){
float number;
number = calc('+',5.5,6.5);
printf("二つの合計 = %f",number);
}

float calc(char op, float a, float b){
int x;
printf("1:足し算 2:引き算 3:掛け算 4:割り算\n x=");
scanf("%d", &x);

switch(x){
case 1:
return a+b;
break;
case 2:
return a-b;
break;
case 3:
return a*b;
case 4:
return a/b;
default:
printf("該当なし\n");
}
}

これで実行できたのですが、
number = calc('+',5.5,5.6);の

+だと足し算をしてるみたいに見えるのでどうにかできますか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

calcの第一引数の型がcharなんですから、"+"ではなく'+'を渡すべきでは。


main.c:16:12: error: expected ';' before '{' token

swichじゃなくてswitchです。


+だと足し算をしてるみたいに見えるのでどうにかできますか?

calcをそのように定義したのはあなたでしょう。定義を変えればいいです。

calcは『第二引数と第三引数に対して、第一引数の二項演算をする』関数に見えます。
その点では、calcの中で入力を求める時点で致命的におかしいです。


基礎的な部分が全く分かっていないようです。参考書をいちから読み直してください。
ここでいくら指摘しても、ご自身が主体的に勉強しないと成長はないです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

まず、ソースを見やすく整形してください。また、”動きません。”ではどう動かないのかが分かりません。

・・・ちょっと見ですが。
このソース、コンパイル出来ないですよね?
main()に戻り値(int main())宣言がない。
swich->switch
calc("+",5.5,6.5);で文字列"+"(ポインタ)を渡してるのにfloat calc(char op, float a, float b)で文字として受け取っている。また、calc()の中で演算(加減乗除)を選択(1〜4)させているのにswitch文が1と2しかない。return "op",a-b;は何をしたいのでしょう? switchに外れた場合のreturnがない。などなど・・・
コンパイラがエラーを出しているはずなのでエラーやワーニングを見ましょう。
[追記]
BAが出てるようなので・・・今更ですが

#include <stdio.h>
//
double        calc    (char op, double a, double b);

int main()
{
    double        number;
    number = calc('+', 5.5, 6.5);
    printf("二つの合計 = %lf\n", number);
    //
    return 0;
}

double calc(char op, double a, double b)
{
    double        x = 0.0;

    switch (op) {
    case '+':
        x = a + b;
        break;
    case '-':
        x = a - b;
        break;
    case '*':
        x = a * b;
        break;
    case '/':
        x = a / b;
        break;
    default:
        printf("該当なし\n");
    }
    return x;
}


usr~/test >./a.out 
二つの合計 = 12.000000
usr~/test >

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/15 00:54

    ソースが見にくいのはすみませんでした。
    repl.itというサイトを使っているので動かせます。
    1と2しかないのは動くのか知りたくてまだ手を付けてませんでした。
    勉強不足ですみません。

    キャンセル

0

return "op",a+b;

"op",の記述箇所が不要です。

return a+b;

また、コード中では引数のopは使用していません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    覆面算をとくプログラムは?

    覆面算をプログラムで解くとした場合、皆さんなら風にふうにしますか? (利用言語は問いません。) 覆面算とは: http://ja.wikipedia.org/wiki/%E8%A

  • 受付中

    計算機のプログラム

    初めて質問投稿します。質問に対して不足している情報などあるかもしれませんが、ご容赦ください。 Javaで簡単な計算機の仕組みを作ろうとしています。 しかし、いざコンパイルしようと

  • 解決済

    c言語 switch文の処理が分かりません

    前提・実現したいことc言語 学習について 今やってる所の解き方が分かりません誰か教えて下さい。 このソースコードをPCなしでのノートだけで解いてくださいと書かれているので誰か分かる

  • 解決済

    【C言語】スタックをリストで実現するプログラム

    毎度お世話になっております。 高橋麻奈さんの「やさしいC アルゴリズム」をみて勉強しているのですが、リストを使ったスタックのコードで、がコンパイルエラーになってしまいました。 コ

  • 受付中

    整数の繰り返し入力

    整数を繰り返し入力し、0 を入力したら、それまでに入力した整数の合計と個数を出力(表示)するプログラムを改造し、 t を入力したら、それまでに入力した数値の合計を出力(表示)して終

  • 解決済

    コードを見てダメ出しや指摘などお願いします。

    #include <stdio.h> int main(void){     double a;     double b;        char o;  //演算子    

  • 解決済

    C言語 簡易関数電卓作成 エラーばかり

    プログラミング初心者です。 c言語で電卓を作成してみましたが、うまく動いてくれません。 コンパイルできない。 エラー個所をコメントアウトして実行すると、一文字入力後操作を受

  • 解決済

    C言語でわからないこと

    include <stdio.h> float calc(char op, float a, float b); main(){ float number; number 

同じタグがついた質問を見る

  • C

    3069questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。