if语句与后自增作业疑问:为何未得到预期结果?
问题拆解:为什么代码输出是4而不是2?
别担心,这绝对是新手刚接触条件语句时超容易踩的坑!咱们把你的代码拆开来,逐行捋执行过程就一目了然了~
首先先把你的代码格式化,更清晰地展示结构:
int i = 0; if (i == 0) i++; i++; if (i == 3) i += 2; i += 2; Console.WriteLine(i);
核心问题:if语句的代码块范围
在C#(以及很多类似语法的语言)里,如果if关键字后面没有用大括号{}包裹代码,那么只有紧跟在if后面的那一行代码属于条件成立时才会执行的内容,其余不在大括号里的代码,不管if的条件是否满足,都会按顺序执行。
逐行执行流程
咱们一步步算i的变化:
- 初始状态:
i = 0 - 第一个
if (i == 0):条件成立,执行紧跟的i++,此时i = 1 - 注意!这里的第二个
i++不在if的代码块里,不管条件怎么样都会执行,所以执行后i = 2 - 接下来
if (i == 3):此时i是2,条件不成立,所以跳过紧跟的i += 2 - 但是最后这个
i += 2同样不在if的代码块里,必须执行,所以i = 2 + 2 = 4 - 最后执行
Console.WriteLine(i),输出就是4
如果你想得到预期的2该怎么改?
如果希望if条件满足时,连续执行多行代码,一定要用大括号把这些代码包裹起来,比如:
int i = 0; if (i == 0) { i++; i++; } if (i == 3) { i += 2; i += 2; } Console.WriteLine(i);
这样执行的话,第一个if块里的两行i++都会在条件成立时执行,i变成2;第二个if条件不成立,里面的代码都不会执行,最后输出就是2啦~
内容的提问来源于stack exchange,提问作者littlerobot
相关产品推荐
相关产品推荐

