Страница 1 из 1

трудность:строковой массивы . .

Добавлено: 13 окт 2005, 22:14
RomeO
Написал небольшую програмку,

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 *'

с чем это может быть связано?

Спасибо!

Добавлено: 14 окт 2005, 01:54
slavaz
Ты передал первым параметром не указатель на строку, а первый символ из строки. Почему автоматом перевелось в int? Вероятно, потому, что stricmp первым параметром ожидает указатель, а обычно sizeof(void *) == sizeof(int) (верно по крайней мере для i386). Вот твой char и привёлся по размеру к int.
В твоём случае лучше сделать так:

Код: Выделить всё

if(gruppa[p].fio[0] == 'A' or gruppa[p].fio[0] == 'a') 
Или так, если нужен именно поиск в строке с некой позиции (в данном случае с 0):

Код: Выделить всё

 if(stricmp((const char *) &gruppa[p].fio[0],"A")==0) 

Добавлено: 14 окт 2005, 21:47
RomeO
ОТлично, заработало. .
ТОлько вот вопрос, что делается (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]
это так.. ??

СПАСИБО!

Добавлено: 14 окт 2005, 22:09
RomeO
Как я разобрался на примере, то 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[], а как же работать с каждым символом по отдельности??

Добавлено: 15 окт 2005, 07:57
myst
:twisted:
Читай "Язык программирования Си. Б. Керниган, Д. Ричи".

Добавлено: 15 окт 2005, 12:39
RomeO
myst, А в интернете можно такое найти?? И где именно??

Добавлено: 15 окт 2005, 13:41
myst

Добавлено: 15 окт 2005, 13:56
Llama
K&R есть в свободном доступе на lib.ru