请问下,为什么这个程序运行是错误的?

intmain(){intm,n;scanf("%d/%d",&m,&n);inta=m;intb=n;intt;while(b!=0){t=a%b;a=b;b=t;}p... int main()
{
int m,n;
scanf("%d/%d",&m,&n);

int a=m;
int b =n;
int t;
while(b!=0){
t=a%b;
a=b;
b=t;
}
printf("公约数为%d\n",a);
m/=a;
n/=a;
printf("%d/%d\n",m,n );
return 0;

}
展开
 我来答
xgn911
2022-09-16 · TA获得超过1364个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:649万
展开全部

辗转相除法求最大公约数,代码是没问题的

但注意到:scanf("%d/%d", &m, &n); 是格式化输入

运行时在输入第一个数m后必须紧跟着输入'/',否则会影响第二个数n的输入

如图所示结果是正常的:

但如果输入3后空了一格再输入'/',scanf会因没有找到'/'而误判下个数n的输入:

如此结果就会不正常,不知道你的问题是不是这个原因造成的

更多追问追答
追问
可以了,谢谢。
那个scanf中不是已经有/了,为什么还要在运行中再加/
追答
scanf中的'/'表示格式化输入,意思是输入必须按照这个格式来
中间分隔符也可以换成其他任意字符
如scanf("%d-%d", &m, &n); 那么输入就必须是“3-5”这样的形式
当然如果没有格式化输入的需求,只是想输入两个数且用空格隔开
那么写成 scanf("%d%d", &m, &n);就可以了,中间不用额外加分隔符
微测检测5.10
2023-07-11 广告
IEC62133与en62133的区别如下:1. 认证机构不同:IEC62133是国际的标准,它以国际通用的标准进行生产;而en62133采用的是欧盟的标准,它使用欧盟的生产需求进行生产。2. 宗旨不同:IEC62133的宗旨是促进电气、电... 点击进入详情页
本回答由微测检测5.10提供
万径寻踪
高粉答主

2022-09-16 · 多视角多领域看待世事
万径寻踪
采纳数:3326 获赞数:6575

向TA提问 私信TA
展开全部
main()前不能加int吧。
追问
好像是可以的,我写的其他程序都可以运行,这个运行的时候n变成0了
好像是可以的,我写的其他程序都可以运行,这个运行的时候n变成0了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2022-09-16
展开全部
scanf()不加/。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式