请问老师这段代码输出的结果怎么不对啊,C怎么不等于0呢?

请问老师这段代码输出的结果怎么不对啊,C怎么不等于0呢?


int main(int argc, const char * argv[]) {
    @autoreleasepool {
    int a = 3;
    int b = 8;
    int c = 0;
    while(b>a){
        c = b-a;
        NSLog(@"c=%d",c);
        a++;
        
    }
    a++;
    NSLog(@"a=%d",a);
    NSLog(@"b=%d",b);
    NSLog(@"c=%d",c);
}
return 0;
}



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
提问者 太极飞飞 2017-03-04 01:14:24

谢谢老师详细的答案,原来这么回事,现在理解了。

Tender10 2017-02-22 10:13:09

你写的代码是没有问题的,逻辑也是正确的,你是真正意义上给C进行赋值了。

Tender10 2017-02-22 10:09:06

// 你的代码执行顺序及结果,1、2、3、4、5代表第几步执行

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        int a = 3;

        int b = 8;

        int c = 0;

        while(b>a){

            // 1、c = b-a 即 c=8-3=5

            // 2、c=8-4=4

            // 3、c=8-5=3

            // 4、c=8-6=2

            // 5、c=8-7=1

            c = b-a;

            NSLog(@"c=%d",c);

            // 1、a++ 即a=3+1=4

            // 2、a++ 即a=4+1=5

            // 3、a++ 即a=5+1=6

            // 4、a++ 即a=6+1=7

            // 5、a++ 即a=7+1=8 此时b不大于a跳出循环

            a++;

        }

        NSLog(@"a=%d",a);// a=8

        NSLog(@"b=%d",b);// b=8

        NSLog(@"c=%d",c);// c=1

    }

    return 0;

}


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        int a = 3;

        int b = 8;

        int c = 0;

        while (b>a) {

            // 1、c=b-a=8-3=5

            // 2、c=b-a=8-4=4

            // 3、c=b-a=8-5=3

            // 4、c=b-a=8-6=2

            // 5、c=b-a=8-7=1

            // 1、c=b-a=8-3=5

            NSLog(@"c=%d",b-a);//这种方式其实打印的是b-a的值,并没有真正意义上将b-a的值赋值给c

            // 1、a++=3+1=4

            // 2、a++=4+1=5

            // 3、a++=5+1=6

            // 4、a++=6+1=7

            a++;

        }

        NSLog(@"a=%d",a);// a=8

        NSLog(@"b=%d",b);// b=8

        NSLog(@"c=%d",c);// c=0 这里因为c在开始赋值的初始值是0,所以最终打印的值就是0

    }

    return 0;

}

Tender10 2017-02-17 09:30:28

其实你这么写的结果得出的答案就是c=1;如果将循环体中的代码改成

 while (b>a) {

            NSLog(@"c=%d",b-a);

            a++;

        }

最终c的结果就是c=0了,两者之间为什么会有这样的差别,你可以仔细思考一下哦!如果还是不明白可以在问答里提问哦!

  • 提问者 太极飞飞 #1
    不是太明白,请老师解释下好吗
    2017-02-22 00:25:43
  • 不明白,完全看不懂
    2018-03-28 10:03:31
  • 如果这一个回复看不懂,你也可以看看上一个回复中的详细解释啊,上一个解释的还是比较详细的哦。如果自己还是有不明白的地方,可以提出自己的疑问啊,助教也都会为你在详细解释一下,帮你解决心中的疑惑。
    2018-03-28 10:44:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师