求C语言资深高手解答,关于输入和输出
程序如图,输入10A20B后按回车为什么出现不确定值。告诉我为什么,出现这种问题的原因是什么?怎么改正?...
程序如图,输入10 A 20 B后按回车为什么出现不确定值。告诉我为什么,出现这种问题的原因是什么?怎么改正?
展开
5个回答
展开全部
C语言的输入是流的概念。
当碰上scanf的时候,会检查当前的输入流,如果为空,就要求用户输入。如果不为空,则根据当前的格式化要求,从输入流里面接收数据进来。
而%d这种格式化要求,会从输入流的开始检查,忽略到开始的空格,直到碰见数字。如果在碰见数字之前碰到了字母,则本次输入失败。从第一个碰见的数字开始,一直往后扫描,直到碰到非数字或者空白字符停止,将扫描到的数据传递给接收的人停止。
而%c这种格式化要求,直接从输入流的开始那一个字符进来就完事了,不会忽略空白字符。
楼主的代码要求输入%d%c%d%c,而输入的是10空格A空格20空格B回车,第一个%d接收进来的是10,这个没有问题吧,因为碰到了空格这个空白字符结束了。10赋值给变量a1。
注意,这个时候输入流剩下的是空格A空格20空格B回车,第一个是一个空格,所以%c就接收进来一个空格给c2。
输入流剩下A空格20空格B回车,这个时候要求一个%d,但是上来就是一个字母,输入失败,a2不会被赋值,是一个随机值。
同时本次scanf也结束了,后面的c2也没有人赋值。
对于楼主的代码直接输入10A20B就可以了,不需要中间再输入空格了。
当碰上scanf的时候,会检查当前的输入流,如果为空,就要求用户输入。如果不为空,则根据当前的格式化要求,从输入流里面接收数据进来。
而%d这种格式化要求,会从输入流的开始检查,忽略到开始的空格,直到碰见数字。如果在碰见数字之前碰到了字母,则本次输入失败。从第一个碰见的数字开始,一直往后扫描,直到碰到非数字或者空白字符停止,将扫描到的数据传递给接收的人停止。
而%c这种格式化要求,直接从输入流的开始那一个字符进来就完事了,不会忽略空白字符。
楼主的代码要求输入%d%c%d%c,而输入的是10空格A空格20空格B回车,第一个%d接收进来的是10,这个没有问题吧,因为碰到了空格这个空白字符结束了。10赋值给变量a1。
注意,这个时候输入流剩下的是空格A空格20空格B回车,第一个是一个空格,所以%c就接收进来一个空格给c2。
输入流剩下A空格20空格B回车,这个时候要求一个%d,但是上来就是一个字母,输入失败,a2不会被赋值,是一个随机值。
同时本次scanf也结束了,后面的c2也没有人赋值。
对于楼主的代码直接输入10A20B就可以了,不需要中间再输入空格了。
追问
%s和%c都是这样的情况吗?
追答
%s和%d差不多,碰到空白字符结束
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-03-30
展开全部
问题出在printf函数的逗号。去掉逗号即可。 不懂继续追问。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入函数里面scanf(" %d%c%d%c",&a1 ,& c1 ,&a2 ,&c2);
双引号里的内容和你在控制台输入的不匹配
依次读取到的值时10 空格 A 空格 20 空格 B
所以最后输出的纸是那样
双引号里的内容和你在控制台输入的不匹配
依次读取到的值时10 空格 A 空格 20 空格 B
所以最后输出的纸是那样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用四个 scanf()
scanf()输入的结束是 回车
scanf()输入的结束是 回车
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询