关于do-while语句中while()判断条件--c语言初学者求助

关于do-while语句中while()判断条件--c语言初学者求助

问题描述:

求两个正整数的最大公约数与最小公倍数如下程序
#include
void main()
{
int m,n,a,b,i;
scanf("%d%d",&m,&n);
if(m>0&&n>0){
b=m*n;
if(m<n)
{a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;}while(n=0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}

}

其中while判断条件若为while(n=0) 可输出正确值 若为while(n==0) 无法执行 =不是赋值么 ==才是等于
不是应该为while(n==0)么?

while(n >0 )

你的while(n==0)的意思是:当n!=0时,循环就结束掉,,,,,所以肯定得不出答案的,
你的while(n = 0 ) 可以为赋值状态,可以当做true处理的。。。

你确定代码没有问题吗?

do{i=m%n;
m=n;
n=i;}while(n=0);这里不管是用while(n=0)还是while(n==0)都是错的;
原因:当while里的条件为true时继续循环,为false时退出循环,这里应该用while(n!=0),当n非零的时候继续。
另外,头文件没写完,应该是#include "stdio.h"

应该改为while(n>0),do{}while() 的意思是,先做do里面的内容,再while里面的条件,如果条件为true,就继续做do里面的内容知道while里面的条件不满足就结束。

我在codeblock复制粘贴你的代码不能直接运行,需要把while的判断条件改为while(n!=0);
代码如下:只做了一些小改动(主函数的返回值改成了int型,while的判断条件改了,结果就正确了)
#include
int main()
{
int m,n,a,b,i;

scanf("%d %d",&m,&n);

if(m>0&&n>0)
{
b=m*n;
if(m<n)
{
a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;
printf("m=%d",m);
}while(n!=0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}
}
逻辑判断确实是==,但是在上诉代码中,应该用的是!=

#include "stdio.h"
void main()
{
int m,n,a,b,i;
scanf("%d%d",&m,&n);
if(m>0&&n>0){
b=m*n;
if(m {a=m;
m=n;
n=a;
}
do{i=m%n;
m=n;
n=i;}while(n>0);
printf("最大公约数为:%d\n",m);
b=b/m;
printf("最小公倍数为:%d\n",b);
}
}

= 是赋值
== 是判断
从逻辑上来说应该是 ==

n = 0 是赋值表达式,结果永远为 TRUE