我有一个打印功能:
myprintf("%d ..... other_things_to_print");
我从许多不同的函数中调用myprintf()函数。
假设函数func()调用myprintf()但是没有任何内容可以传递给“%d”(在上面的myprintf()中以粗体显示)。
我不想打印零代替“%d”
我如何 避免 在此处打印 取代“%d”?
我试过:'\ b','' - 但myprintf()正在为这些字符打印等效的整数值。
请在这个问题上给我一些提示。
感谢。
最诚挚的问候,
Sandeep Singh
答案 0 :(得分:3)
如果您不想在没有提供参数的情况下打印%d
,请在if()-else
函数内使用myprintf()
结构输出该位置。这是一个例子:
if( d_variable ) {
printf("%d ..... other_things_to_print");
} else {
printf("..... other_things_to_print");
}
这是if-else
允许你做的事情。
答案 1 :(得分:0)
将指针传递给int。
如果指针为NULL,则不要打印int;如果指针不是NULL,则打印int
foo(int *value, const char *txt) {
if (value && txt) printf("%d %s\n", *value, txt);
else if (value) printf("%d\n", value);
else if (txt) printf("%s\n", txt);
else printf("(no data)\n");
}
您可以使用不同的数据调用
int x = 42; foo(&x, "x");
foo(NULL, "NULL");
foo(&x, NULL);
foo(NULL, NULL);
答案 2 :(得分:0)
您可以将void指针用于此目的,如下所示。
#define ONE_INT 1
#define ONE_INT_ONE_STRING 2
struct print_format
{
unsigned int type;
void *data;
}
struct fomat_one_int
{
int num;
}
struct fomat_one_int_one_Str
{
int num;
char *str;
}
.......
void myprintf(struct print_format *format)
{
unsinged int format_type = 0;
format_type = format->type;
switch(format_type)
{
case ONE_INT:
{
struct format_one_int *f = NULL;
f = (struct format_one_int *)fomat->data;
printf("%d some string", f->num);
break;
}
case ONE_INT_ONE_STRING:
{
struct fomat_one_int_one_Str *f = NULL;
f = (struct fomat_one_int_one_Str *)fomat->data;
printf("%d some string %s", f->num, f->str);
break;
}
......
}
}
答案 3 :(得分:-1)
您可以更改myprintf以采用多个参数n
:
void myprintf(int n, int arg1, int arg2, int arg3) {
if (n == 3) {
printf("%d %d %d", arg1, arg2, arg3);
} else if (n == 2) {
printf("%d %d", arg1, arg2);
} else if (n == 1) {
printf("%d" , arg1);
} else if (n == 0) {
printf("no");
}
}
并定义一些宏:
#define myprint0() myprintf(0, -1, -1, -1)
#define myprint1(x) myprintf(1, x, -1, -1)
#define myprint2(x,y) myprintf(2, x, y, -1)
#define myprint3(x,y,z) myprintf(3, x, y, z)