【问题标题】:I've made two codes but I can't interpret why these two are different and produce different results我制作了两个代码,但我无法解释为什么这两个代码不同并产生不同的结果
【发布时间】:2020-11-08 00:25:18
【问题描述】:

我写的第一个代码是这样的……

for (i = 0; startNum + i <= endNum; i++)
    {
        num = startNum + i; // num도 100부터 시작
        
        while (1) // 고집수를 확인하기 위함
        {
            doubleNum = transNumber(num); // 각 자리 수의 곱의 값
            count = count + 1;
            if (doubleNum < 10) {break;}
            
            num = doubleNum;
        }

第二个代码如下

 for (i = 0; startNum + i <= endNum; i++){
        num = startNum + i; // num도 100부터 시작
        count = 0;
        while (num > 10) {
            num = transNumber(num);
            count++;
        }
    if (count == goNum)
        {
            printf("%d\n", startNum + i);
            count2 = count2 + 1;
        }
    }

我的想法是,如果我创建一个新变量doubleNum,那么它将继续接收transNumber 的结果。另外,既然我放了if statement,那么它的代码就和第一个代码一样……

但是,结果显然不同,我想知道是否可以对此进行具体解释?

【问题讨论】:

  • 当函数 transNumber() 返回 10 时,循环的行为会有所不同。第一个示例中的循环不会结束,但在第二个示例中会结束。
  • ...但不清楚哪一个是错的,因为目的未知。第一个应该是doubleNum &lt;= 10,或者第二个应该是num &gt;= 10
  • 虽然第一个代码是产生正确结果的代码,但您是否认为其他功能可能会影响 while statement 产生不同的输出,即使两者具有相同的功能和在第二个代码中将&lt;10 编辑为&lt;=10&gt;10 后工作方式相同?
  • 请发minimal reproducible example,以便我们重现问题并帮助您调试

标签: c if-statement while-loop


【解决方案1】:

if (doubleNum < 10) {break;}

doubleNum 达到 9 或更少时循环中断。

 while (num > 10)

num 达到 10 或更少时,循环停止。

因此不同。

使用

while (num > 10) //first code

if (doubleNum <= 10) {break;} //second code

应该修复它。

【讨论】:

  • 那我能再问一件事吗?我将doubleNum&lt;10 更改为doubleNum&gt;10doubleNum&lt;=10 仍然会有不同的结果......这两个while statement 代码是否仍然不同?还是您认为是因为transNumber等其他功能?
  • @Learner_15,当然很不一样,if(doubleNum&lt;10)表示条件为真而doubleNum小于10,即小于等于9,if(doubleNum&gt;10)表示条件为真而doubleNum为大于 10,即 11 或更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 2016-11-13
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多