Использование строковых указателей в аргументе переменной Функция - PullRequest
0 голосов
/ 04 декабря 2018

Вопрос Итак, как следует из названия, я спрашиваю, есть ли способ использовать stdarg.h для печати текста в функции переменного аргумента.У меня возникла идея создать своего рода календар, по которому можно было бы искать, но у меня проблема с поиском / проверкой строки, которая была введена.Буду благодарен за любые предложения.

Код:

void CinemaPrint(int count,...)
{
    va_list k;
    va_start(k,count);
    int i=0;
    for(i=1;i<count+1;i++)
    {
        printf("%d. %s\n\n",i, va_arg(k,int));
    }
    va_end (k);
    char textz[]="xxxxxxxxxxxxxx";
    scanf("%s",&textz);
    char* pointer=(char*)(&count+1);
    for(i=1;i<count+1;i++)
    {
        if(textz==*pointer)
        {
            printf("Cinema %s is %d.",*pointer, i);
        }
    }
}

int main()
{
    printf("Hello kino!\n");
    char text1[]="Cinema City";
    char text2[]="Hutnik";
    char text3[]="Svetozor";
    char text4[]="Lucerna";
    char text5[]="Flora3D";

    CinemaPrint(5,text1,text2,text3,text4,text5);


    return 0;
}

Что он делает

Hello kino!
Cinema City

Hutnik

Svetozor

Lucerna

Flora3D

Hutnik //this was inputed from me. After this it ends

Что я хочу это сделать

Hello kino!
Cinema City

Hutnik

Svetozor

Lucerna

Flora3D

Hutnik

Cinema Hutnik is 2.

1 Ответ

0 голосов
/ 04 декабря 2018

Здесь есть две основные проблемы.

Во-первых, вы не можете вручную перебрать список аргументов переменной с помощью char* pointer=(char*)(&count+1); Вам нужно снова вызвать va_start и va_end, используя другой va_list пример.Вы также должны получить аргумент как char * вместо int, чтобы типы аргументов типа совпадали.

Во-вторых, вы не можете сравнивать строки с ==.Это будет просто сравнить адреса каждого из них.Для этого вам нужно strcmp.

char textz[]="xxxxxxxxxxxxxx";
scanf("%s",textz);

va_list k2;
va_start(k2, count);
for(i=1;i<count+1;i++)
{
    char *pointer = va_arg(k2, char *);
    if(!strcmp(textz,pointer))
    {
        printf("Cinema %s is %d.",pointer, i);
    }
}
va_end(k2);
...