我不知道我要编译的这个 C 程序到底是如何工作的。我正在 MacBook 上编译它,所以也许这可以解释不寻常的错误?无论如何,编译后的程序似乎无法正常工作。编译后,我得到这些:
ers.c:在函数“evolve”中: ers.c:205: 警告:格式中存在未知转换类型字符 0xa ers.c:在函数“print_rule”中: ers.c:304: 警告:格式中存在未知转换类型字符 0xa ers.c:在函数“test_evaluate”中: ers.c:380: 警告:格式中存在未知转换类型字符 0xa
指的是这几行代码:
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 类型格式有关。
任何人都可以看到做错了什么吗?
ASCII 编码中的
0xa
是换行符 \n
,所以你的错误确实来自 "%\n"
结构
我假设原始开发人员的意思是“%%”而不是“\%”(显示“%”字符)。但我不相信这个程序曾经在任何平台上编译过。
顺便说一句:%g 是 double 的替代格式化字符(输出与 %f 或 %e 相同,具体取决于 double 值)。
"%\n"
不是有效的格式说明符。如果您需要 %
字符作为输出的一部分,则需要使用 "%%"
。