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

你需要逃离这个%标志%%

由于%)不匹配任何变量类型,它会失败。通过在它前面添加一个来逃避%它。

你的新行应该是,

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 问题:

“问:如何在 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%%")产生“百分比”。

所以,在你的情况下,你的格式字符串应该看起来像printf("%d: %d (%.2lf%%) \n",...)

参考:


  1. 如何逃避 C 的 printf 中的 % 符号?
于 2013-08-08T22:47:52.530 回答