求C语言资深高手解答,关于输入和输出

程序如图,输入10A20B后按回车为什么出现不确定值。告诉我为什么,出现这种问题的原因是什么?怎么改正?... 程序如图,输入10 A 20 B后按回车为什么出现不确定值。告诉我为什么,出现这种问题的原因是什么?怎么改正? 展开
 我来答
百度网友e8ce36093d
2015-03-30 · TA获得超过213个赞
知道小有建树答主
回答量:60
采纳率:0%
帮助的人:72.2万
展开全部
原因在于,你的scanf语句。
scanf(%d%c%d%c")表示你要连续输入一个整数一个字符一个整数一个字符,并且整数和字符之间没有任何分割。
那么你输入10 A 20 B后,
10被赋给了a1,空格被赋给了c1,接着空格被赋给了a2,后面的数字被赋给了c2。
所以错了。
应该写成scanf(%d %c %d %c"),这样就OK了。
风雷九州
2015-03-30 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:422万
展开全部
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就可以了,不需要中间再输入空格了。
追问
%s和%c都是这样的情况吗?
追答
%s和%d差不多,碰到空白字符结束
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-03-30
展开全部
问题出在printf函数的逗号。去掉逗号即可。 不懂继续追问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5105e52
2015-03-30 · 超过26用户采纳过TA的回答
知道答主
回答量:166
采纳率:0%
帮助的人:47.6万
展开全部
输入函数里面scanf(" %d%c%d%c",&a1 ,& c1 ,&a2 ,&c2);
双引号里的内容和你在控制台输入的不匹配
依次读取到的值时10 空格 A 空格 20 空格 B
所以最后输出的纸是那样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
漫长星6862
2015-03-30
知道答主
回答量:12
采纳率:0%
帮助的人:7.4万
展开全部
用四个 scanf()
scanf()输入的结束是 回车
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式