首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么循环运行无限次?

问为什么循环运行无限次?
EN

Stack Overflow用户
提问于 2021-12-11 19:17:32
回答 3查看 59关注 0票数 1

朋友们,我的目标是用C语言从数字1-99中找到带有奇数和的数字,并将它们打印在屏幕上。为了尝试,我缩小了范围,在代码中写了5而不是99。然而,有一个问题,这段代码,我认为它在我脑海中的逻辑中很好地工作,进入一个无休止的循环。我找不到该做什么。你觉得我怎么解决这个问题?

预期输出(考虑5而不是99):“数字和奇数:1数字和奇数: 3”

代码语言:javascript
复制
int main() {
    int n, m, result, temp;

    for (int i = 1; i < 5; i++) {
        temp = i;

        while (i > 0) {
            m = i % 10;
            result += m;
            i = i / 10;
        }

        if (result % 2 != 0) {
            printf("%d", temp);
        }
    }   
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-11 19:23:54

在循环中使用i++,在循环中使用i = i / 10,而在循环中使用i是0。这意味着,i被困在了1的位置上。

对于数字迭代,您需要另一个变量,或者切换对i和temp的使用,以便只通过循环的增量来更改i:

代码语言:javascript
复制
int main()    
{
  int n, m, result, temp;
  for(int i = 1; i < 5; i++)
  {
    result = 0;
    temp = i;
    while(temp>0)
    {
        m = temp % 10;
        result += m;
        temp = temp / 10;
    }
    if (result %2!=0)
    {
        printf("%d", i);
    }
  } 
  return 0;
}

编辑:我也没有注意到,您忘记了用初始值初始化result,因此基本上一直在添加垃圾值。您应该在每次迭代中使用0初始化它。

票数 4
EN

Stack Overflow用户

发布于 2021-12-11 19:26:00

您可以在i中复制temp。

但是,您不需要在内环中使用temp和操作i。

坚持你的初始计划,只在内部循环中使用temp。

您可能还希望在某个时候插入/重置result。

票数 3
EN

Stack Overflow用户

发布于 2021-12-11 19:26:40

您需要在i循环之后重置while的值。如公告所示,i的值在while循环之后为零。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70318265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档