0

C ++で2つの値を比較しようとしています(これは初めてなので、簡単に行ってください)

struct styles{
int itemNo;
char desc[26]; 
char brand[21]; //between 3 - 20
char category;
double cost;
};  

上記で宣言された構造体、次にこのコードを別の関数で使用しています

char cat[2];
for (x=0;x<size;x++)
{

    if (strcmp(cat,styleAr[x].category)==0)

if ステートメントの 'styleAr[x].category' でエラーが発生しました: タイプ "char" の引数は、タイプ "const char * のパラメーターと互換性がありません

これを解決する方法についての説明は素晴らしいでしょう

4

4 に答える 4

3

あなたはcategory単一charでありcat、文字の配列です(つまり a char *)...おそらく、文字列を単一の文字と比較するつもりはありませんでした

于 2013-08-14T12:16:30.930 に答える
3

catが文字列 (つまり、1 つの文字の後に が続く) であると仮定すると、次の'\0'ようにする必要があります。

if (cat[0] == styleAr[x].category)

しかしもちろん、std::string catandを使用する場合std::string categoryは、次のように書くことができます。

if (cat == styleAr[x].category)
于 2013-08-14T12:17:03.467 に答える
2

strcmp文字配列を比較しますが、カテゴリは単一charであるため、エラーが発生します。を使用して2つの文字を直接比較でき== ますカテゴリが単一の文字であると想定されている場合、比較コードを変更する必要があります

char cat='?';//or whatever you are looking for

for (x=0;x<size;x++)
{
    if (cat == styleAr[x].category)
于 2013-08-14T12:19:53.870 に答える
1

catどの値にも初期化されていない 2 文字の配列 ( ) (少なくとも、表示されたコードでは) を1 つの文字と比較しています。

strcmp関数は type の 2 つの引数を受け入れます。これconst char*は、ヌルで終わる 2 つの C スタイル文字列 (最後の要素が '\0' 文字、ヌル文字である char 配列) です。

1 文字だけを比較する場合は、次のコードを使用します。

char cat = ; // Put the character you want to compare styleAr[x].category against there.

for (int x = 0 ; x < size; x++)
{
    if (cat == styleAr[x].category)
    {
       // The two characters are equal.
    }
}
于 2013-08-14T12:25:45.577 に答える