标题:[求助]20+30=?
只看楼主
双子星
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-2-25
 问题点数:0 回复次数:12 
[求助]20+30=?
main()
{
int a,b,sum;
scanf("%d,%d",&a,&b);
sum=a+b;
printf("sum is %d\n",sum);
}

运行后,
输入20,30,结果是50 /*20和30之间是逗号*/
输入20 30,结果是3149 /*20和30之间是空格*/
输入20.30,结果是3149 /*20和30之间是点号*/

帮忙解释一下,为什么是这种运行结果.
如何改写,使得无论输入20,30或20 30或20.30,其运行结果都是50
谢谢
搜索更多相关主题的帖子: sum 结果 int 
2006-05-01 15:07
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
scanf的格式所致
scanf("%d%d",&a,&b);就可以了

对不礼貌的女生收钱......
2006-05-01 15:17
小许
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-3-14
得分:0 
scanf("%d,%d",&a,&b);一般来说%d,%d中间最好不要有','号,你输入的时候一定要严格按照字的格式来.比方说好果是scanf("%dasdfasdfasdf%d",&a,&b);的话你就一定要按照()asdfasdfasdf()的格式来输入//()就是你要输入的数
2006-05-01 15:18
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
不好意思,说错了,应该得严格按照scanf的格式来才对

对不礼貌的女生收钱......
2006-05-01 15:19
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
3楼说的没错

对不礼貌的女生收钱......
2006-05-01 15:20
private
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-5-1
得分:0 
你看就知道没有好好看 书 !!

scanf("%d,%d",&a,&b); 这是一个函数,前面一个参数是 输入控制字符串 也 就是说你在""之间写了什么
在输入时就要严格照你的格式去 输入 .
你如: scanf("zhe ge hen nan%d*****%d",&a,&b); 这样写了这个函数.那么你在输入时就要照着去做.
输入为 zhe ge hen nan20 *****30回车...........如果不是这样输入的,如输入 zhe ge hen nan20 30回车,

那么c就会六亲不认, 把这个zhe ge hen nan20 30当成 你的a 变量 而还没输入完...你有连按回车
这样会有不可预料的结果

你那样 输入 /*20和30之间是空格*/ 因为scanf()在碰到 回车 或 空格 等空白符就认为一次输入完毕,而你有没有逗号, 那c就用自己的理解去 装如 a;;;就会出错...

2006-05-01 15:31
双子星
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-2-25
得分:0 
也就是说,格式要严格对应,是这样的吧.
2006-05-01 15:34
private
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-5-1
得分:0 

输入方面难点是在字符的输入,
因为在涉及到 字符 或 字符串 输入 时 ,是一个范例.

特别是在 循环体中 涉及到 要输入 字符 时 很容易犯错.

因为这样会涉及到 键盘缓冲区的 问题,
一般的解决办法是 在输入语句前加一句 清空缓冲区的语句..


2006-05-01 15:56
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
得分:0 
2楼大哥,这种问题不要管他们,这种问题应该让他们自己找问题的根源

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-01 17:23
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

//有个兼容性强的方法:
#include<stdio.h>
int main( )
{ int a,b,c;
scanf("%d%*c%d",&a,&b);//注意这个"%*c"
c = a+b;
printf("%d+%d=%d\n",a,b,c);
return 0;
}
//运行时输入变得自由一些。下列均有等价的效果
// 20 30 <Enter>
// 20,30 <Enter>
// 20/30 <Enter>
// 20.30 <Enter> 天哪!小数点作分隔符居然也行


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-01 18:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-61445-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.350235 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved