1

現在、sprintf を使用してフォーマット指定子 %u を何も置き換えない方法があるかどうか疑問に思っています

私の質問は、 %u を値で置き換えるか、何も置き換えない sprintf での三項演算子の使用についてです。

これが私がやろうとしていることの例です:

int main (void)
{
   char mytab[10]={'\0'};
   uint_32 i=0;

   scanf("%u",&i);

   sprintf(mytab, "\"%u"\",i>0?i:/*Here is the syntax I want to find if it exists*/);
   printf("%s\r\n",mytab);

   return 0;
}

私が取得しようとしているコードの結果は、たとえば、入力が1の場合は「1」(または入力が2の場合は「2」...)、入力が0の場合は「」です。

それについてのアイデアや説明はありますか?事前に感謝します。

4

4 に答える 4

3

i の値に応じて"%u"、 またはのいずれかを使用することを選択して、フォーマット文字列に三項演算子を配置する必要があると思います。""

sprintf(mytab, i? "\"%u\"" : "\"\"", i);
于 2013-10-23T15:46:37.013 に答える
2

このステートメントを変更します

sprintf(mytab, "\"%u"\",i>0?i:/*Here is the syntax I want to find if it exists*/);  

これが必要です。

 (i>0)? sprintf(mytab, "%u",i) : sprintf(mytab,"%s","") ;

編集

AS H2CO3 推奨

こんな使い方もできます。

if (i > 0)  
sprintf(mytab, "%"PRIu32, i); 
else
sprintf(mytab,"%s","");   

%uまた、は の適切な書式指定子ではないことにuint32_t注意してください。"%"PRIu32

(i>0)? sprintf(mytab, "%"PRIu32,i) : sprintf(mytab,"%s","") ;  
于 2013-10-23T12:31:27.497 に答える
2

ifシンプルなステートメントが依然として最もクリーンなオプションだと思います。

char mytab[10] = "\"\"";

if (n > 0) {
    snprintf(mytab, sizeof mytab, "\"%" PRIu32 "\"", n);
}
于 2013-10-23T18:12:21.623 に答える