2 flowaway flowaway_ 于 2014.12.04 21:27 提问

scanf(),printf()输入,输出问题

scanf("%d %d %d",&i,&j,&k); printf("%d %d %d\n",i,j,k),i,j为int型,k为char型时,输入任意三个数,输出的第二个数总是0,如输入1 2 3 则会输出1 0 3,i,j,k都是 int型时,输出和输入一样,请问是什么原因?

4个回答

funtasty
funtasty   2014.12.04 22:03
已采纳

定义的时候顺序是 ijk, scanf 将 输入信息以sanf 制定 格式写入, sanf 的时候是%d, k 写入的区域认定为整型, 4字节, 由于栈的特点, 在前面定义的j的低三位被擦除了。所以看起来是0

zhao4zhong1
zhao4zhong1   Rxr 2014.12.05 11:35

理解和讨论之前请先学会如何观察!

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

zhkmxx930
zhkmxx930   2014.12.04 22:05

我这边没问题捏,你是啥编译器

flowaway_
flowaway_   2014.12.05 18:48

谢谢各位的回答了,受益匪浅,@zhkmxx930,我用的编译器是DEV-C++。

Csdn user default icon
上传中...
上传图片
插入图片