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

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

ただいまの
回答率

90.49%

  • C

    3809questions

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

  • C++

    3581questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

C言語で四則演算を

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,712

Mk38

score 1

前提・実現したいこと

C言語四則演算を作ろうと思っているのですがエラーがでて先へ進めません
if (bun == "a");この部分の「==」の所でエラー:オペランド型に互換性がありません("char"と"const char*")と出てしまいます

発生している問題・エラーメッセージ

エラー:オペランド型に互換性がありません("char""const char*")

該当のソースコード

pragma warning(disable:4996)

include <stdio.h>

include <conio.h>

define _CRT_SECURE_NO_WARNINGS

int main(void)
{
    int b;
    double inp1, inp2, c, kotae;
    char bun;

    printf("---SoftVersion:0.12---\n");
        printf("##\n本ソフトは未完成品のα版のため\n不具合が発生する場合がありますので");
            printf("あらかじめご了承ください\n");
                printf("始めるにはa,終了する場合はbを入力してください");
                if (bun == "a");

試したこと

課題に対してアプローチしたことを記載してください

補足情報(言語/FW/ツール等のバージョンなど)

C言語 Microsft Visual Studio

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

+1

ぶっちゃけ、""はstring(文字列)、''はキャラクタ(バイト)って考えてくださいね。
Cでは文字列を比較する際には、strcmpってものを使用します。
って事で後は自分で悩みましょう♪

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

0

変数bunはchar型(文字)なので、比較するときは右辺も同じ型である必要があります。
C言語で"xxxx"は文字列であり、右辺に"a"と書くとその文字列が格納されている先頭アドレスとなります。

if (bun == 'a')


と書くのが正しいです。
まずはC言語における文字列と文字の扱いを学習したほうがよいと思います。

また余談ですが、bunを初期化(入力)していないようですが、それはこれからということですかね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/18 11:03 編集

    > 比較するときは右辺も同じ型である必要があります。
    正しくは「暗黙裡に他方に変換できる型」
    だから if ( bun == 97 ) でも合法(それが善いことかはさておき)。

    なのでたとえば '1'と比較するのをうっかり if ( bun == 1 ) とやっちゃうと
    コンパイルエラーとならず、実行時に挙動不審で悩むハメになります。

    このケースでは bun(char) と "a"(const char*) では暗黙変換できんのでエラーとなってます。

    キャンセル

  • 2016/05/18 11:31

    あ~、まあ厳密な話をするとそうなんですけど、文字列も文字もわかっていなそうな初心者にそういう話をするよりも、まずは基本的な話として回答しました。

    キャンセル

  • 2016/05/18 11:34 編集

    はい、「四の五の言わんと型を合わせろ」には全面的に同意します。

    キャンセル

0

"a"はポインタの型です。
char型にするには'a'としてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

"a" では文字列という意味になると思います。'a'で1文字という判断だと思います。

さらに文字として定義するなら、unsigned char型が良いと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/18 08:49

    なぜに unsigned char?

    キャンセル

  • 2016/05/18 11:52

    文字の場合、7ビットではなく8ビットにするクセがあります。
    今は文字の場合、UNICODE型・・・・たぶん2バイトだと思います。

    この場合はキーボード入力なので

    a=a and 0x7F

    とするか、==’a’ or =='A' とするでしょう。私ならですが。

    答えは「くせ」です。

    キャンセル

関連した質問

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

  • C

    3809questions

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

  • C++

    3581questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。