2016-08-24 3 views
-2

ich diesen Code haben:Warnung: mehr '%' Umsätze als Daten Argumente [-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]); 

und erhalte ich die Fehlermeldung:

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

Was ist die Ursache dafür?

+0

Ich denke, dass Sie nicht genug Argumente übergeben. – Rakete1111

+1

Sie haben 9% Argumente in Ihrem String und nur 8 Datenelemente in der Liste – Rob

+0

Up Voting, weil Sie den Compiler-Schalter verwenden! –

Antwort

2

Sie haben 9 Formatbezeichner und nur 8 folgende printf Argumente.

Die Warnung erklärt sich selbst. Es ist gut, dass Sie dies nicht ignoriert haben, denn das resultierende Verhalten dieses Aufrufs ist undefined.

Um dies zu beheben, fügen Sie entweder das zusätzliche Argument hinzu oder entfernen Sie einen der Formatbezeichner (%).

+2

Insbesondere durch die Variablennamen und die Präfixe in der Format-Zeichenfolge sieht es so aus, als ob er das Argument fehlt, das mit 'm =% 7.2f' gedruckt werden soll. – Barmar

+0

@Barmar Solche Bemühungen! Ich würde es dem Fragesteller erlauben, das auszuarbeiten. Du bist so über und jenseits! –

0

Ihr Fehler wird noch deutlicher, wenn Sie den Formatbezeich mit ihren Argumenten ausrichten:

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]); 

Diese zu langen Leitungen führen - wenn Sie das nicht mögen, sollten Sie mehr als einen Anruf zu fprintf() machen.

Verwandte Themen