【问题标题】:simple loop is not working properly简单循环无法正常工作
【发布时间】:2015-02-03 05:54:09
【问题描述】:
int f,b;
int x=0;
int m=502;
int n=3;
int r=1;
int main()
{
while(1){
  if(m>n)
{
f=m/n;  
  b=f*n;
  r=m-b;
printf("1");
  }
  if(m<n)
  {
f=n/m;
   b=f*m;
   r=n-b;
printf("2");
  }

if(r==0)
   {
printf("m=%i n=%i b=%i f=%i",m,n,b,f);
return(1);
   }
 if(m>n && m>r)
{
printf("4");
  m=r;
}
if(n>m && n>r)
{
printf("5");
n=r;
}}
}

因此,如果我编辑出 while(1),程序会正确执行一次,但我希望它循环返回,无论是 for(;;) 还是 while (1) 还是 while (x==0) 终端(或 cmd)窗口没有打印任何内容,也没有终止

并且所有 printf 我卡在每个条件中的任何内容都没有打印,这意味着我的 m 和 n 都不满足这些条件! 所以我尝试了这个 while (1){ printf("0");其余代码}

它会打印 013400000000 直到我终止
非常感谢你 我使用 kali linux gcc-4.7.2

【问题讨论】:

  • 请注意正确格式化您的代码,因为它完全不可读。
  • 我的眼睛感到疼痛。请格式化您的代码。

标签: loops


【解决方案1】:
#include<stdio.h>
int f,b; 
int x=0;  
int m=502;
int n=3;
int r=1;
int main()
{
printf("in main\n");
int loop=0;
while(1)
{
    printf("in while %d %d %d\n",m,n,r);

    printf("if(m>n) %d\n\n",m>n);
    if(m>n)
    {
       f=m/n;  
       b=f*n;
       r=m-b;
       printf("m>n 1\n");
    }
    printf("if(m<n) %d\n\n",m<n);
    if(m<n)
    {  
       f=n/m;
       b=f*m;
       r=n-b;
       printf("m<n 2\n");
    }
    printf("if(r==0) %d\n\n",r);
    if(r==0)
    { 
       printf("m=%i n=%i b=%i f=%i\n",m,n,b,f);
       return(1);
    }
    printf("if(m>n && m>r) %d\n\n",m>n && m>r);
    if(m>n && m>r)
    {
       printf("m>n && m>r 4\n");
       m=r;
    }
    printf("if(n>m && n>r) %d\n\n",n>m && n>r);
    if(n>m && n>r)
    {
       printf("n>m && n>r 5\n");
       n=r;
    }
    if(loop++ == 10)
    break;
 }
}

您的循环运行良好,但所有conditional if 语句都返回0,这就是为什么您在条件中的printf 语句在循环的第一次迭代之后从未执行。

我没有试图理解你想要达到的目标。但是,我认为您是编程新手。

忠告

当你遇到循环问题时,总是使用printf 语句,就像我一样。查看正在发生变化的loop variablesany other variables 将有助于更好地跟踪循环的execution flow

【讨论】:

  • 首先,非常感谢您重新编辑代码
  • @user3566929 如果他们回答了您的问题,则接受答案。如果您认为答案对您有帮助,请点赞。
  • 首先,非常感谢您费心重新编辑代码,您的代码可以完美运行......现在的问题是如果我删除所有 if 条件之间的所有 printf 语句,循环第一次迭代后又卡住了,它显然在做某事,我不明白它返回了什么,我知道 if 语句只是一个分支或跳转指令......所以你能详细说明一下吗? ..谢谢你
  • 很抱歉发生电源短路
  • mn 等于 second iteration 中的 1,因此前两个 if 条件为 false 并检查 r 的值以了解确切原因剩余条件为false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2016-11-02
  • 2014-12-02
  • 2013-08-09
相关资源
最近更新 更多