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

Форум предназначен для новичков. В нем предполагается рассматривать вопросы, которые встают на первых этапах освоения Linux
RomeO
Заглянувший
Сообщения: 19
Зарегистрирован: 11 окт 2005, 17:40
Контактная информация:

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

Сообщение 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 *'

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

Спасибо!

slavaz
Фанатеющий
Сообщения: 155
Зарегистрирован: 20 июл 2005, 15:22
Откуда: Brest
Контактная информация:

Сообщение 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) 
just for fun

RomeO
Заглянувший
Сообщения: 19
Зарегистрирован: 11 окт 2005, 17:40
Контактная информация:

Сообщение 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]
это так.. ??

СПАСИБО!

RomeO
Заглянувший
Сообщения: 19
Зарегистрирован: 11 окт 2005, 17:40
Контактная информация:

Сообщение 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[], а как же работать с каждым символом по отдельности??

Аватара пользователя
myst
Маньяк
Сообщения: 190
Зарегистрирован: 04 окт 2005, 15:46
Откуда: не возвращаются

Сообщение myst »

:twisted:
Читай "Язык программирования Си. Б. Керниган, Д. Ричи".
Иными вечерами я пью, чтобы кого-нибудь не пристрелить. Это акт благотворительности. Не за что.

RomeO
Заглянувший
Сообщения: 19
Зарегистрирован: 11 окт 2005, 17:40
Контактная информация:

Сообщение RomeO »

myst, А в интернете можно такое найти?? И где именно??

Аватара пользователя
myst
Маньяк
Сообщения: 190
Зарегистрирован: 04 окт 2005, 15:46
Откуда: не возвращаются

Сообщение myst »

Иными вечерами я пью, чтобы кого-нибудь не пристрелить. Это акт благотворительности. Не за что.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

K&R есть в свободном доступе на lib.ru
Опыт растет прямо пропорционально выведенному из строя оборудованию

Ответить