2016-08-24 10 views
-2

私は、このコードよりも多くの '%' 変換:警告:データ引数[-Wformat] C++

fprintf(fitxer_sortida, "blob %d ->\t a=%7.0f\t p=%8.2f (%8.2f extern)\t pconvex=%8.2f\t ext=%.0f\t m=%7.2f\t c=%3.2f\t l=%8.2f\n", 
       i, area[i], perimetre[i], externPerimeter[i], perimetreConvex[i], exterior[i], compacitat[i], longitud[i]); 

と、私はエラーが表示さ:

warning: more '%' conversions than data arguments [-Wformat] 

これの原因は何ですか?

+0

十分な引数を渡していないと思います。 – Rakete1111

+1

あなたの文字列には9%の引数があり、リストには8個のデータ要素があります。 – Rob

+0

コンパイラスイッチを使用しているため投票が行われます。 –

答えて

2

フォーマット指定子は9つあり、引数はprintfの8つしかありません。

警告はそれ自身について説明しています。この呼び出しの結果の動作は、が未定義のであるため、これを無視していないことをお勧めします。

これを修正するには、余分な引数を追加するか、書式指定子(%)のいずれかを削除します。あなたはその引数と書式指定子を揃える場合

+2

具体的には、書式文字列の変数名と接頭辞を使用すると、 'm =%7.2f'で出力されるべき引数が見つからないように見えます。 – Barmar

+0

@Barmarそのような努力!私は尋問者にそれを働かせようとしていた。あなたはそんなに上です! –

0

あなたの誤差がより明らかになった:

fprintf(fitxer_sortida, 
     "blob %d" " ->\t a=%7.0f" "\t p=%8.2f" " (%8.2f extern)\t " "pconvex=%8.2f\t " "ext=%.0f\t " "m=%7.2f\t " "c=%3.2f\t " "l=%8.2f\n", 
     i,   area[i],   perimetre[i], externPerimeter[i], perimetreConvex[i], exterior[i], /* oops */ compacitat[i], longitud[i]); 

これは、長い行につながるん - あなたはそれを好きではない場合、fprintf()に複数の呼び出しを行うことを検討してください。

関連する問題