-1

これはC++コンソールスニペットです。

ユーザー入力に応じて、いくつかの関数の中から関数保持パラメーターを呼び出したいと思います。

例えば:

#include<iostream>
using namespace std;

void Add (int x, int y)
    {
        cout << x + y << endl;
    }

void Subs (int x, int y)
    {
        cout << x - y << endl;
    }


int main(int argc, char* argv[])
{
    // Variable initialization
    char calc_type;
    int x;
    int y;

    // Console input
    cout << "Add or Substract (a or s)?" << endl;
    cin >> calc_type;
    cout << "1st number" << endl;
    cin >> x;
    cout << "2nd number" << endl;
    inc >> y;

    if (calc_type == "a")
    {
        Add(x, y);
    }
    else
    {
        Subs(x, y);
    }

return 0;

}

しかし、これを書いていると、次のようなエラーメッセージが返されます。

エラーC2446:'==':'constchar*'から'int'への変換なし

この変換が可能なコンテキストはありません

エラーC2040:'==':'int'は、間接参照のレベルが' constchar[2]'と異なります。

この問題にどのように対処できますか(おそらく参照またはポインターが優先されます???)

ありがとうございました

4

3 に答える 3

2

calc_typechar変数です。定数「a」は文字列です。Cでは、char定数は二重引用符ではなく、一重引用符で囲まれています。つまり、次のように言い換えます。

if (calc_type == 'a') 
于 2012-07-16T14:52:29.503 に答える
1

文字リテラルには一重引用符を使用します。

if (calc_type == "a")

ここでの二重引用符"a"は、それが文字列リテラルであることを意味します。これは、タイプがconst char[2]{'a', '\0'})であることを意味します。calc_typeはであるcharため、タイプが一致しません。'a'一方、文字タイプは、細かく比較できる文字タイプです。

于 2012-07-16T14:51:17.770 に答える
1

おそらくあなたは意味しました:

calc_type == 'a'

それ以外の

calc_type == "a"

calc_typeacharであり"a"、はconst char*

于 2012-07-16T14:51:41.210 に答える