Я пытаюсь сравнить 2 значения в C ++ (что я новичок, поэтому, пожалуйста, будьте проще)
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)
это дает мне ошибку с ‘styleAr [x] .category’ в операторе if:
аргумент типа «char» несовместим с параметром типа «const char *
любые объяснения о том, как я мог бы решить это было бы здорово
При условии, что cat
является строкой (то есть один символ, за которым следует '\0'
), то вы должны сделать это:
if (cat[0] == styleAr[x].category)
Но, конечно, если вы используете std::string cat
а также std::string category
Вы можете просто написать:
if (cat == styleAr[x].category)
У тебя есть category
как единый char
а также cat
это массив символов (то есть char *
) … вы, вероятно, не хотели сравнивать строку с одним символом
strcmp
сравнивает массивы символов, но категория только один char
отсюда и ошибка. Вы можете сравнить два символа напрямую, используя ==
Если категория должна быть одним символом, вам нужно изменить код сравнения
char cat='?';//or whatever you are looking for
for (x=0;x<size;x++)
{
if (cat == styleAr[x].category)
Вы сравниваете массив из двух символов (cat
), который НЕ инициализируется ни для какого значения (по крайней мере, в коде, который вы нам показали), для одного символа.
strcmp
функция принимает два аргумента типа const char*
, то есть две строки c-стиля с нулевым символом в конце (массив char, последний элемент которого является символом \ 0, нулевой символ).
Если вы хотите сравнить только один символ, используйте следующий код:
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.
}
}