请问下,为什么这个程序运行是错误的?
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;
} 展开
{
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;
} 展开
3个回答
展开全部
辗转相除法求最大公约数,代码是没问题的
但注意到:scanf("%d/%d", &m, &n); 是格式化输入
运行时在输入第一个数m后必须紧跟着输入'/',否则会影响第二个数n的输入
如图所示结果是正常的:
但如果输入3后空了一格再输入'/',scanf会因没有找到'/'而误判下个数n的输入:
如此结果就会不正常,不知道你的问题是不是这个原因造成的
更多追问追答
追问
可以了,谢谢。
那个scanf中不是已经有/了,为什么还要在运行中再加/
追答
scanf中的'/'表示格式化输入,意思是输入必须按照这个格式来
中间分隔符也可以换成其他任意字符
如scanf("%d-%d", &m, &n); 那么输入就必须是“3-5”这样的形式
当然如果没有格式化输入的需求,只是想输入两个数且用空格隔开
那么写成 scanf("%d%d", &m, &n);就可以了,中间不用额外加分隔符
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询