C语言while的小细节

最近几天在看《 C P r i m e r P l u s C Primer Plus CPrimerPlus》的第五章——运算符、表达式和语句,看到思考题第八题的时候,发现了一个以前可能会忽略的点。

题目如下:
下面的程序将打印出什么内容?

//problem
#include<stdio.h>

int main()
{
	int n = 0;
	while (n++ <10)
	{
		printf("%d ", n);
	}
	return 0;
}

很显然,打印1到10 。
这个while循环是这样执行的:
先判断n的值是否小于10,再进行n+1,最后进行while的{ }中的语句。
相当于

//problem*
#include<stdio.h>

int main()
{
	int n = 0;
	while (n<10)
	{
		n++;
		printf("%d ", n);
	}
	return 0;
}

而非

#include<stdio.h>

int main()
{
	int n = 0;
	while (n<10)
	{
		printf("%d ", n);
		n++;
	}
	return 0;
}

注意上面两串代码 n++ 的位置的区别

当然,这是最基础的部分,但是我又想到,在while(n++…)的载体上,进行下面一段代码会怎么样呢?

//代码1
#include <stdio.h>
int main()
{
	int n = 0;
	while (n++ <10)
	{
		;
	}
	printf("%d\n", n);
	return 0;
}

我在未运行这段代码前,想的是这段代码和下面一段代码是一样的:

//代码2
#include <stdio.h>
int main()
{
	int n = 0;
	while (n< 10)
	{
		n++;
	}
	printf("%d\n", n);
	return 0;
}

然而,上面的“代码1”输出结果是11,“代码2”输出结果是10 。
我们来分析一下。

先看代码2:
最后一次进入循环时,n=9,执行完 n++ 出循环语句后n变为10,while中的 n<10 为假,执行printf函数。

但是代码1是这样执行的:
当 n=10 时,程序判定while的判断框中内容为假,但是程序先执行了 n++ ,再跳出循环,所以输出的值为11 。

以前认为“ problem ”和“ problem* ”是等价的,但是不是这样的,书真是常看常新啊。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值