问题 因此,正如标题所暗示的,我在问是否有一种方法可以将stdarg.h用于变量自变量函数中的文本打印。我想到了一种可以搜索的callendar的想法,但是我遇到了查找/测试输入字符串的问题。我将感谢您的任何建议。
代码:
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.
答案 0 :(得分:1)
这里有两个主要问题。
首先,您无法使用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);