5

コンパイルしようとしているこの 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 型の書式設定と関係があると思われます。

誰が何が間違っているかを見ることができますか?

4

2 に答える 2

9

0xaASCIIエンコーディングは Line Feed characterであるため、エラーは実際に構造\nから発生しています"%\n"

元の開発者は「\%」ではなく「%%」を意味していたと思います (「%」文字を表示するため)。しかし、このプログラムがどのプラットフォームでもコンパイルされたとは思えません。

ところで: %g は double の代替フォーマット文字です (出力は、double 値に応じて %f または %e と同じです)。

于 2012-11-19T14:02:02.467 に答える
6

"%\n"は有効な書式指定子ではありません。%文字を出力の一部にする必要がある場合は、 を使用する必要があります"%%"

于 2012-11-19T13:43:52.843 に答える