A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海江1 中级黑马   /  2014-6-4 10:54  /  4943 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

例1:scanf("%d%d",&a,&b);
例2:scanf("%d,%d",&a,&b);
请问:例1和例2哪个对??

我看过一些资料是这样说的:输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键、跳格键tab。。。。。

还看过一些资料是这样说的:用“%d%d%d”格式输入时,不能用逗号作为两个数据间的分隔符。

求详解。。。。。。。

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 XCodeRush 于 2014-6-4 12:48 编辑

scanf("%d%d", &a, &b);
scanf("%d, %d", &a, &b);
它们都对,你看的资料说的也对。
不同的只是他们的输入方式有分别,用scanf()函数读取输入时,scanf()函数会严格按照程序编写者的要求和用户的输入来解析输入流中的数据。
当%d和%d之间没有任何字符时,也就是第一条语句scanf("%d%d", &a, &b);执行时,scanf()函数会逐字符的解析用户输入的字符,但它会跳过回车、空格、和制表符。
当%d和%d之间有字符时(任意字符都可以),如:scanf("%d, %d", &a, &b);那么这个字符(,)只是一个占位符,没有其他的作用,在用户输入时,只要在相应的位置输入这个字符(,)就可以了,除此之外,没有其他的作用,此时scanf()函数仍然是跳过回车、空格、和制表符。
比如同样是输入:10, 20(10和20之间有一个逗号,逗号后面是个空格)

第一条语句scanf("%d%d",&a,&b);逐字符读取,它首先会读取第一个字符,1是个数字字符,所以scanf()函数保存后再继续读取,0是个数字字符,scanf()函数读取后(计算后)会再次读取,当scanf()函数读取到','字符处时,由于‘,’是一个非数字字符,而scanf()的参数是要它读取整形数字,所以scanf()函数此时会停止读取,并且把字符‘,’重新放入输入流中,等待下一次读取。注意:这个时候scanf()函数绝对不会越过‘,’字符去读取,它只会停在那里。

第二条语句scanf("%d,%d",&a,&b);同样是逐字符读取,(重复的不多说了)它首先读取10赋值给a,然后读取‘,’字符,由于在格式说明符中有相应的‘,’分隔,所以scanf()函数会忽略这个‘,’继续下一项读取,然后遇到一个空格,scanf()会忽略空格,最后把20赋值给b。就此scanf()函数调用完毕,程序的流程转向scanf()函数的调用函数中。

希望我的回答能够帮到你。

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
两个都对啊,肯定的。就是输入方式不同而已吧
回复 使用道具 举报
scanf里面 有着 %d  %s等  代表着  输入的数字 字符串等  除了这些规定的  
其他的字符如 你写的逗号
%d,%d   这样的话 你输入的两个数之间就必须有个逗号
%d == %d scanf里面是什么 你就得输入什么 当然 空格可以不算在里面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马