我是C编程的初学者。有一件事我不明白。为什么如果我放下
printf("write down any whole number:");
scanf("%d",&(any int variable));
当我使用gdb(debugger)它告诉我,CPU执行printf()
,但不写任何东西,然后转到scanf()
指令,之后写入字符串,并将其通过scanf
函数进行分析。
我正在使用GCC和Linux Debian
问题:为什么printf
只在scanf
之后执行?
谢谢。
正如您在调试器中看到的那样——作为初学者使用调试器真是太棒了!- printf已经正确执行。字符现在在缓冲区中,当输出换行符或缓冲区满时,缓冲区将刷新,这可能发生在4096字节,或其他一些量,通常是2的幂。缓冲的原因是效率:实际传输到终端的速度很慢。如果每个角色都发生这种情况,那么它就会变得非常缓慢。修复方法是打印换行符,或者使用flush显式刷新。