如何在C中不打印整数值

如何在C中不打印整数值,c,printf,C,Printf,我有一个打印功能: myprintf("%d ..... other_things_to_print"); 我从许多不同的函数中调用这个myprintf()函数 假设函数func()调用myprintf(),但它没有要传递给“%d”的内容(在上面的myprintf()中以粗体显示) 我不想用零来代替这个%d” 如何避免打印任何内容来代替此处的“%d” 我尝试过:'\b',''--但是myprintf()正在打印这些字符的等效整数值 请在这个问题上给我一些提示 谢谢 致以最良好的祝愿 S

我有一个打印功能:

myprintf("%d ..... other_things_to_print");  
  • 我从许多不同的函数中调用这个myprintf()函数

  • 假设函数func()调用myprintf(),但它没有要传递给“%d”的内容(在上面的myprintf()中以粗体显示)

  • 我不想用零来代替这个%d”

如何避免打印任何内容来代替此处的“%d”

我尝试过:'\b',''--但是myprintf()正在打印这些字符的等效整数值

请在这个问题上给我一些提示

谢谢

致以最良好的祝愿


Sandeep Singh

您可以更改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)

将指针传递给int

如果指针为空,则不要打印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);

如果您不想在未提供参数的情况下打印
%d
,请在
myprintf()
函数中使用
If()-else
结构以不输出该位置。以下是一个例子:

if( d_variable ) {
    printf("%d ..... other_things_to_print");
} else {
    printf("..... other_things_to_print");
}

这是
如果else
允许您执行的操作。

您可以使用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;
        }
        ......
    }
}

您尝试添加一个
\b
作为参数。你就不能把
%d
放下吗?对不起,不清楚。你上面的不是一个函数。这是一个函数调用。这已经是一个特定的呼叫。你不能“从许多不同的函数调用它”。你不能打电话。这根本没有道理。您有一个以某种方式声明的
myprintf
函数。当您调用它时,您将提供参数(每个位置都有一组单独的参数)。参数必须按照函数规范的要求正确格式化。就是这样。那么,问题出在哪里呢?不,这个打印函数:myprintf()有一个固定的打印格式。它被许多函数调用,其中一些函数确实具有“%d”的有效值。我不想为那些没有与此“%d”对应的任何有效值的函数打印任何内容@Sandeep Singh:如果您没有该
%d
的值,则意味着您无法调用此函数。编写不同的函数(不使用
%d
)或使此函数更灵活。无论如何,很难给出任何建议,因为我们不知道您的
myprintf
在格式中做了什么。它是否应该类似于标准的
printf
?只需给我们函数的接口定义以及如何调用它的示例。