4

次のコンパイル エラーが発生する C プログラムを作成しました。

rand_distribution.c:24:7: warning: unknown conversion type character ‘)’ in format [-Wformat]

この行で

 printf("%d: %d (%.2lf %) \n", i+1, frequencies[i],100.0 * frequencies[i] / TOTAL_COUNT);

My objective to get an output like this.
1: 333109 (16.66%)
2: 333113 (16.66%)
3: 333181 (16.66%)
4: 333562 (16.68%)
5: 333601 (16.68%)
6: 333434 (16.67%)

つまり、')' の前の '%' は、解釈されずにそのまま出力される必要があります。どうすればこれを達成できますか?

#include <stdio.h>
#include <stdlib.h>  // for rand(), srand()
#include <time.h>    // for time()

const int TOTAL_COUNT = 2000000;  // Close to INT_MAX
const int NUM_FACES = 6;
int frequencies[6] = {0}; // frequencies of 0 to 5, init to zero

int main()
{
   srand(time(0)); /* seed random number generator with current time*/

   /* Throw the die and count the frequencies*/
   int i = 0;
   for (i = 0; i < TOTAL_COUNT; ++i)
   {
      ++frequencies[rand() % 6];
   }

   /*Print statisics*/
   for (i = 0; i < NUM_FACES; i++)
   {
      printf("%d: %d (%.2lf %) \n", i+1, frequencies[i],100.0 * frequencies[i] / TOTAL_COUNT);
   }
}
4

4 に答える 4

12

%記号をエスケープする必要があります%%

%)どの変数型とも一致しないため、失敗します。その前にa を追加してエスケープし%ます。

あなたの新しい行は、

printf("%d: %d (%.2lf %%) \n", i+1, frequencies[i],100.0 * frequencies[i] / TOTAL_COUNT);
于 2013-08-08T22:46:14.567 に答える
3

変換仕様%printf使用して印刷します。%%

交換

printf("%d: %d (%.2lf %) \n"

printf("%d: %d (%.2lf %%) \n"

\%が機能しない理由を理解するには、c-faq の質問を参照してください。

「Q: printf フォーマット文字列で '%' 文字を出力するにはどうすればよいですか? \% を試しましたが、うまくいきませんでした。」

http://c-faq.com/stdio/printfpercent.html

于 2013-08-08T22:45:19.320 に答える
2

印刷したい場合は、%書く必要があります%%

:

printf("%d: %d (%.2lf %%) \n"
于 2013-08-08T22:46:43.877 に答える
1

%%文字をエスケープするために使用します。

例: printf("Percent%%")「Percent%」が得られます。

したがって、あなたの場合、フォーマット文字列は次のようになりますprintf("%d: %d (%.2lf%%) \n",...)

参考文献:


  1. Cのprintfで%記号をエスケープするには?
于 2013-08-08T22:47:52.530 に答える