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

#include<stdio.h>main(){inta,b,ret1;ret1=scanf("%d,%d",&a,&b);printf("ret=%d\na=%d,%c... #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为出错的结果
展开
 我来答
百度网友e2cfd9c
2014-04-17 · TA获得超过505个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:265万
展开全部
%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 长整数或双精度浮点数
松甜恬0Je4ba
2014-04-16 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3346万
展开全部
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  ,是响铃,只是响一声,任何字符都打印不出来。所以,你测试还是不要使用这些控制字符为好
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SilentHeartDZ
2014-04-16
知道答主
回答量:16
采纳率:0%
帮助的人:11.7万
展开全部
ret1=scanf("%d,%d",&a,&b);你确定这个语句没有错?在我的vc6.0中这是个错误的指颂语句。然后你后面的悔和语句我真的是看不太懂为唯前郑什么会输出你第一次的结果= =||
追问
这个是正确语句,因为输入56,89类似的测试数据,都能得到正确的输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式