试图理解这个printf格式输出

时间:2015-08-10 20:15:45

标签: c printf

我不明白为什么这段代码会产生以下输出:

#include <stdio.h>

#define LOWER 0
#define UPPER 300
#define STEP 20

float c_to_f(float c);

int main(void) {
    for (int c = LOWER; c <= UPPER; c += STEP) {
        printf("%3.0f %6.1f\n", c, c_to_f(c));
    }

    return 0;
}

float c_to_f(float c) {
    return c * (9.0/5.0) + 32;
}

带输出:

  0 5144477247317086170901765440027035767837163293591161256351693248184965237877467107389389528872273154691913581744607058050215827488351921876414407003384176234234181468372580859505320314312544948225387164490993094256968227227818959640206687395851530141696.0
  0 5144477248223936133773425621301895611375254354002848388186656757998856300277376171732587490599187934010444965285645525890922748188992798901374640654313592657351174354641522290319226294263523595109393871854132336451448805097328901373303486131449817464832.0
  0 5144477248704033172940775129035644940307184915397270987393402145547386862724386852855456999748731052473196874219136479453649941501096792620471234940099754293118994117960373636044235342472865231695044481634617817613232640440010635232001791344413616635904.0
  0 5144477249104114038913566385480436047750460383225956486732356635171162331430229087124514924040016984525490131663712274089255935927850120719718396844921555656258843920726083090815076215980649928849753323118355718581385836558912080114250379021883449278464.0
  0 5144477249344162558497241139347310712216425663923167786335729328945427612653734427685949678614788543756866086130457750870619532583902117579266693987814636474142753802385508763677580740085320747142578628008598459162277754230252947043599531628365348864000.0
  0 5144477249584211078080915893214185376682390944620379085939102022719692893877239768247384433189560102988242040597203227651983129239954114438814991130707717292026663684044934436540085264189991565435403932898841199743169671901593813972948684234847248449536.0

我明白c应该是float,而不是输出。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这里的问题,正如我所看到的那样

printf("%3.0f %6.1f\n", c, c_to_f(c));

cint,您尝试使用%f undefined behavior来打印它的值。

对格式说明符使用不适当类型的参数是未定义的行为。

答案 1 :(得分:0)

使用printf和float时,你有正确的标记%f。但你使用它错了。要打印2个小数位,你将使用%。2f,3将是%.3f,依此类推。我认为控制台是因为你正在使用%3.0f和%6.1f

而烦恼