-1

私は印刷機能を持っています:

myprintf("%d ..... other_things_to_print");  
  • このmyprintf()関数をさまざまな関数から呼び出します。

  • 関数func()がmyprintf()を呼び出すが、「%d」(上記のmyprintf()で太字で示されている)に渡すものが何もないとします。

  • この「%d」の代わりにゼロを出力したくない

ここで「%d」の代わりに何かを印刷しないようにするにはどうすればよいですか?

私は試しました:'\ b'、''-しかし、myprintf()はこれらの文字と同等の整数値を出力しています。

この問題に関するヒントを教えてください。

ありがとう。

よろしくお願いします、

サンディープシン

4

4 に答える 4

3

%d引数が指定されていないときに出力したくない場合は、関数if()-else内の構造体を使用して、その位置を出力しないようにします。myprintf()次に例を示します。

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

これはif-elseあなたができることを意味するものです。

于 2012-07-31T15:27:26.580 に答える
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);
于 2012-07-31T15:25:53.037 に答える
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;
        }
        ......
    }
}
于 2012-08-05T04:34:10.543 に答える
-1

myprintfを変更して、いくつかのargsパラメーターを受け取ることができます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)
于 2012-07-31T15:22:50.757 に答える