printf:未知转换类型字符')'格式为-Wformat

时间:2013-08-08 22:44:39

标签: c random printf

我编写了一个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 个答案:

答案 0 :(得分:6)

您需要转发%符号%%

由于%)与任何变量类型都不匹配,因此失败。通过在其前添加%来逃避它。

你的新行应该是,

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

答案 1 :(得分:3)

使用%使用printf转化规范打印%%

替换

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

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

要了解\%无效的原因,请参阅c-faq问题:

“问:如何在printf格式字符串中打印'%'字符?我尝试了\%,但它没有用。”

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

答案 2 :(得分:1)

如果您想要打印%。您应该写%%

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

答案 3 :(得分:1)

使用%%来转义角色。

例如:printf("Percent%%")产生“百分比%”。

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

参考文献:


  1. How to escape the % sign in C's printf?