3

sprintfステートメントでマクロを使用しようとしています。こんな感じです:

#define MACR 6

....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );

ここでは、6の代わりにMACRを使用したいと思います。誰か助けてもらえますか?

4

4 に答える 4

10

書式指定子を使用して*、幅を引数として渡します。このようなものが動作するはずです:

sprintf( Formatted, "%0*d", MACR, Number );

ただし、マクロではなく定数を使用してください。

于 2013-03-19T15:06:46.077 に答える
2

最も簡単な解決策は、長さを で指定し'*'、マクロを引数として渡すことです。

sprintf( formatted, "%0*d", MACR, number );

または、次のように文字列を連結できます。

sprintf( formatted, "%0" STRINGIZE(MACR) "d", number );

通常の STRINGIZE マクロを使用:

#define STRINGIZE_HELPER(x) # x
#define STIRNGIZE(x) STRINGIZE_HELPER(x)

(もちろん、最も簡単で安全な解決策は、 を忘れてsprintfを使用することstd::ostringstreamです。)

于 2013-03-19T15:08:12.820 に答える
1

これを解決するには、次の 2 つの方法があります。

  1. マクロに完全な形式を含めます。

    #define MACR  "%06d"
    
    sprintf(Formatted, MACR, Number);
    
  2. *幅指定子を使用します。

    #define MACR 6
    
    sprintf(Formatted, "%0*d", MACR, Number);
    
于 2013-03-19T15:08:13.980 に答える
0
#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );
于 2013-03-19T15:07:29.283 に答える