从情人节的流行代码说起

今年情人节有一段表达爱情的代码在网上传火了,并且引起了许多的讨论,

for (int i=0; i<forever; i++);

    printf("I Love You");

看起来似乎是某位程序员要表达自己的爱慕之情,但是第一行末尾多了一个分号,从而使得后面的printf语句永远不能得到执行;

于是有人解读说,分号是故意加的,表示“爱你在心口难开”;好吧,我们没法联系到原作者,不能否定这个说法是否作者本意;

我们还是按照常规理解对这个代码进行解读,实际上是否故意加了这个分号,并不影响我们的解决。

这个代码显然是不能运行的,因为forever这个变量(或者宏)并没有定义,也没有初始化,编译就会出错,代码根本无法执行。

简单的想法是把forever初始化成一个比较大的数值,比如 int forever=INT_MAX ; 但即便这样,这个代码也还是有问题的,

因为INT_MAX虽然很大,终归经过”漫长“的运行之后,还是会达到的,for循环就退出了,并不能无限次的执行;

或许合理的方式是按照下面这样写:

int forever=INT_MAX;

for (int i=0; i<=forever; i++)

    printf("I Love You\n");

首先是把 i<forever 改成了 i<=forever ,因为整数永远不可能大于INT_MAX,当达到和INT_MAX相等的时候,再加1就溢出了,会变成负数,

所以循环就可以无限次的执行了;另外一个修改是printf的输出信息增加了一个换行,否则输出变成I Love YouI Love YouI... 就很抓狂了。

更合理的实现方式,实际上forever完全是多于的,如果要表达无限次的循环,简单的写成 for (;;) 或者 while (true) 不是更好么?


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值