我编写了一个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);
}
}
答案 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格式字符串中打印'%'字符?我尝试了\%,但它没有用。”
答案 2 :(得分:1)
如果您想要打印%
。您应该写%%
printf("%d: %d (%.2lf %%) \n"
答案 3 :(得分:1)
使用%%
来转义角色。
例如:printf("Percent%%")
产生“百分比%”。
因此,在您的情况下,您的格式字符串应该看起来像printf("%d: %d (%.2lf%%) \n",...)
参考文献: