трудность:строковой массивы . .
трудность:строковой массивы . .
Написал небольшую програмку,
struct student
{
char fio[10];
int est1;
int ent1;
int mark[3];
} gruppa[4];
.....
for(int p=0;p<4;p++)
{
--> if(stricmp(gruppa[p].fio[0],"A")==0)
{
printf("%s %d",gruppa[p].fio,gruppa[p].est1);
}
}
а компилятор выдает ошибку строке "if" :
***\Demo6(2).cpp(76) : error C2664: 'stricmp' : cannot convert parameter 1 from 'int' to 'const char *'
с чем это может быть связано?
Спасибо!
struct student
{
char fio[10];
int est1;
int ent1;
int mark[3];
} gruppa[4];
.....
for(int p=0;p<4;p++)
{
--> if(stricmp(gruppa[p].fio[0],"A")==0)
{
printf("%s %d",gruppa[p].fio,gruppa[p].est1);
}
}
а компилятор выдает ошибку строке "if" :
***\Demo6(2).cpp(76) : error C2664: 'stricmp' : cannot convert parameter 1 from 'int' to 'const char *'
с чем это может быть связано?
Спасибо!
-
- Фанатеющий
- Сообщения: 155
- Зарегистрирован: 20 июл 2005, 15:22
- Откуда: Brest
- Контактная информация:
Ты передал первым параметром не указатель на строку, а первый символ из строки. Почему автоматом перевелось в int? Вероятно, потому, что stricmp первым параметром ожидает указатель, а обычно sizeof(void *) == sizeof(int) (верно по крайней мере для i386). Вот твой char и привёлся по размеру к int.
В твоём случае лучше сделать так:
Или так, если нужен именно поиск в строке с некой позиции (в данном случае с 0):
В твоём случае лучше сделать так:
Код: Выделить всё
if(gruppa[p].fio[0] == 'A' or gruppa[p].fio[0] == 'a')
Код: Выделить всё
if(stricmp((const char *) &gruppa[p].fio[0],"A")==0)
just for fun
ОТлично, заработало. .
ТОлько вот вопрос, что делается (const char *), он переводит значение &gruppa[p] в char, если я правильно понял??
А ещё, по поводу первого кода
СПАСИБО!
ТОлько вот вопрос, что делается (const char *), он переводит значение &gruppa[p] в char, если я правильно понял??
А ещё, по поводу первого кода
во-первых он не работает и, если я не ошибаюсь, то он идентичен моей версии, за исключениемslavaz писал(а):Код: Выделить всё
if(gruppa[p].fio[0] == 'A' or gruppa[p].fio[0] == 'a')
это так.. ??slavaz писал(а):
or gruppa[p].fio[0] == 'a')
[/code]
СПАСИБО!
Как я разобрался на примере, то gruppa[p].fio[0] может использроавтсья только как int?? Ведь в fio[x] находится символ, почему же тогда int, даже если прописывать через
printf("%s", gruppa[1].fio[0]);
всеравно надо писать %d, и в этом случае, очевидно, компилятор выдает число., с этим можно что-нить сделать?
А в коде
if(stricmp((const char *) &gruppa[p].fio[0],"A")==0)
как оказалось позже, то он не проверяет является ли fio[0]== А, т.е. он вообще не выполняет условие If . . , даже, если fio[0]- это А. .
Что можно сделать в этой ситуации?
P.S.
Как показали исследования, то при вводе кода:
printf("%s",(const char *) &gruppa[1].fio[3]);
он выдает все симовлы, которые находились после 3его в fio[], а как же работать с каждым символом по отдельности??
printf("%s", gruppa[1].fio[0]);
всеравно надо писать %d, и в этом случае, очевидно, компилятор выдает число., с этим можно что-нить сделать?
А в коде
if(stricmp((const char *) &gruppa[p].fio[0],"A")==0)
как оказалось позже, то он не проверяет является ли fio[0]== А, т.е. он вообще не выполняет условие If . . , даже, если fio[0]- это А. .
Что можно сделать в этой ситуации?
P.S.
Как показали исследования, то при вводе кода:
printf("%s",(const char *) &gruppa[1].fio[3]);
он выдает все симовлы, которые находились после 3его в fio[], а как же работать с каждым символом по отдельности??