这个程序中的未知转换类型我打算编译

时间:2012-11-19 13:41:01

标签: c compiler-construction types compilation

我不知道这个我编译的C程序是如何工作的。我正在MacBook上编译它,所以也许这解释了不寻常的错误?无论如何编译的程序似乎没有正常工作。编译时,我得到了这些:

ers.c: In function ‘evolve’:
ers.c:205: warning: unknown conversion type character 0xa in format
ers.c: In function ‘print_rule’:
ers.c:304: warning: unknown conversion type character 0xa in format
ers.c: In function ‘test_evaluate’:
ers.c:380: warning: unknown conversion type character 0xa in format

参考这些代码行:

 if(i%100==0)printf("best on training set at iteration %d:  %g\%\n", i,100.0* population[bestinpop].acc);

printf("ACCURACY on training set %g\%\n\n", 100.0* r->acc);

printf("TEST ACCURACY %g\%\n", 100.0* r->acc);

我怀疑它与%g类型格式有关。

任何人都可以看到做错了吗?

2 个答案:

答案 0 :(得分:7)

ASCII编码中的0xa是换行符\n,因此您的错误确实来自"%\n"构造

我认为原始开发人员的意思是“%%”而不是“\%”(显示'%'字符)。但我不相信这个程序曾经在任何平台上编译过。

BTW:%g是double的替代格式化字符(输出与%f或%e相同,具体取决于double值)。

答案 1 :(得分:6)

"%\n"不是有效的格式说明符。如果您需要将%字符作为输出的一部分,则需要使用"%%"