问题因此,正如标题所示,我正在询问是否有方法在变量参数函数中使用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. %snn",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.
这里有两个主要问题。
首先,您不能使用char* pointer=(char*)(&count+1);
手动迭代变量参数列表。您需要使用不同的va_list
实例再次调用va_start
和va_end
。您还应该将参数检索为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);