c语言 int类型数据的输出问题

#include<stdio.h>

main(){
int a,b,ret1;
ret1=scanf("%d,%d",&a,&b);
printf("ret=%d \n a=%d,%c,b=%d,%c\n",ret1,a,a,b,b);
//测试数据56,23结果正确,测试数据23,56,结果出错????
}

图1为正确的结果

图2为出错的结果

%5.2 5表示宽度至少为5位,不够以空格填充,大于5位的时候按照实际宽度输出 2表示最大小数位数

以下内容 copy 希望对你有帮助

int printf(const char *format,[argument]);

  format 参数输出的格式,定义格式为:

  %[flags][width][.perc] [F|N|h|l]type

  规定数据输出方式,具体如下:

  1.type 含义如下:

  整数
%d 整数的参数会被转成一有符号的十进制数字
%u 整数的参数会被转成一无符号的十进制数字
%o 整数的参数会被转成一无符号的八进制数字
%x 整数的参数会被转成一无符号的十六进制数字,并以小写abcdef表示
%X 整数的参数会被转成一无符号的十六进制数字,并以大写ABCDEF表示浮点型数

%f double 型的参数会被转成十进制数字,并取到小数点以下六位,四舍五入。
%e double型的参数以指数形式打印,有一个数字会在小数点前,六位数字在小数点后,而在指数部分会以小写的e来表示。
%E 与%e作用相同,唯一区别是指数部分将以大写的E 来表示。
%g double 型的参数会自动选择以%f 或%e 的格式来打印,其标准是根据欲打印的数值及所设置的有效位数来决定。
%G 与%g 作用相同,唯一区别在以指数形态打印时会选择%E 格式。

字符及字符串
%c 整型数的参数会被转成unsigned char型打印出。
%s 指向字符串的参数会被逐字输出,直到出现NULL字符为止
%p 如果是参数是“void *”型指针则使用十六进制格式显示,near指针表示为:XXXX,far 指针表示为:XXXX:YYYY

  %% 显示百分号本身 

  %n 相连参量应是一个指针,其中存放已写字符的个数

  2.flags 规定输出格式,取值和含义如下:

  无右对齐,左边填充0和空格

  - 左对齐,右边填充空格

  + 在数字前增加符号 + 或 -

  一个空格只对负数显示符号

  # 当type=c,s,d,i,u时没有影响

   type=o,x,X时,分别在数值前增加'0',"0x","0X"

   type=e,E,f时,总是使用小数点

   type=g,G时,除了数值为0外总是显示小数点

3.width 用于控制显示数值的宽度,取值和含义如下

n(n=1,2,3...) 宽度至少为n位,不够以空格填充

  0n(n=1,2,3...) 宽度至少为n位,不够左边以0填充 *

格式列表中,下一个参数还是width

4..prec 用于控制小数点后面的位数,取值和含义如下:

  无按缺省精度显示

  0 当type=d,i,o,u,x时,没有影响

   type=e,E,f时,不显示小数点

  n(n=1,2,3...) 当type=e,E,f时表示的最大小数位数

   type=其他,表示显示的最大宽度 .*

  格式列表中,下一个参数还是width

  5.F|N|h|l 表示指针是否是远指针或整数是否是长整数

  F 远指针

  n 近指针

  h 短整数或单精度浮点数

  l 长整数或双精度浮点数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-16
ASCII码值为 23 表示 :23  ETB (end of trans. block) 传输块结束

所以后面的内容就不输出了。

你的第一个测试中,也只是输出b的%d输出,也没有输出%c,这是因为23这个ASCII码表示传输块的结束。

你换成 55,56 56,55 都会正确的追问

但是我输入12,56或者2,56同输入23,56的输出结果一样,都是上面的错误,为什么?

追答

因为ACII码较小的是控制字符,例如 ASCII码等于7 ,是响铃,只是响一声,任何字符都打印不出来。所以,你测试还是不要使用这些控制字符为好

追问

谢谢回答,但是我现在还是有两点不太明白:
1、ASCII码值较小,打印不出来,所以 “都” 显示为方块吗?
2、输入12,56后,在输出中只显示前面的a=12,等信息,为什么不能显示后面的b=56等信息?

追答

1 这个和系统有关吧,windows下可能是方块,不知道其他系统是不是。

2:这个我也说不清楚,因为控制字符,12好像是换页,我不知道控制换页,这个换页具体是怎么实现的?会不会影响输出。

本回答被提问者采纳
第2个回答  2014-04-16
ret1=scanf("%d,%d",&a,&b);你确定这个语句没有错?在我的vc6.0中这是个错误的语句。然后你后面的语句我真的是看不太懂为什么会输出你第一次的结果= =||追问

这个是正确语句,因为输入56,89类似的测试数据,都能得到正确的输出。