《C++游戏编程入门(第4版)》——2.2 使用if语句

简介:

本节书摘来自异步社区出版社《C++游戏编程入门(第4版)》一书中的第2章,第2.2节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 使用if语句

C++游戏编程入门(第4版)
现在将真和假的概念用于实践。if语句用来验证表达式真假,如果为真则执行某些代码。下面给出if语句的简单形式:

if (expression)
   statemet;```
如果expression的值为true,则执行statement,否则程序跳过statement,并转到if组合之后的语句。

提示
 只要看到像上面代码中一样的一般形式的statement,就可以用单个语句或一个语句组成的代码块来代替它,因为代码块被看作单个单元。
2.2.1 Score Rater程序简介
程序Score Rater使用if语句对玩家的分数做出评价。图2.1演示了正在运行的程序。

从网站Cengage Learning(www.cengageptr.com/downloads)上可以下载到本程序的代码。程序位于Chapter 2文件夹中,文件名为score_rater.cpp。

<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/fd0de5c3a4ded443befaf9f8c49e9e98600dd556.png" >
</div>

图2.1 基于不同的if语句显示(或不显示)消息

// Score Rater
// Demonstrates the if statement

include

using namespace std;
int main()
{
   if (true)
   {
     cout << "This is always displayed.nn";
   }
   if (false)
   {
     cout << "This is never displayed.nn";
   }
   int score = 1000;
   if (score)
   {
     cout << "At least you didn’t score zero.nn";
   }
   if (score >= 250)
   {
     cout << "You scored 250 or more. Decent.nn";
   }
   if (score >= 500)
   {
     cout << "You scored 500 or more. Nice.nn";
     if (score >= 1000)
     {
        cout << "You scored 1000 or more. Impressive!n";
     }
   }
   return 0;
}`

2.2.2 验证真与假

第一个if语句验证为true。因为true的值总为真,所以程序显示了消息This is always displayed.。

   if (true)
   {
     cout << "This is always displayed.nn";
   }
第二个if语句验证为false。因为false的值不为真,所以程序不显示消息This is never displayed.。

   if (false)
   {
     cout << "This is never displayed.\n\n";
   }```
陷阱
 意在if语句中验证的表达式的括号后面没有分号。如果加上分号,会形成一个与if语句成对的一个空语句,使if语句无效。如下例所示:

if (false);
{
   cout << "This is never displayed.nn";
}
(false)后面的分号形成了与if语句关联的空语句。上面的代码等同于:

if (false)
    ; // an empty statement, which does nothing
{
   cout << "This is never displayed.nn";
}`
这里用空白字符作为空语句,它不会改变代码的意义。现在问题应该很清晰。if语句检测到false值,跳过下一条语句(空语句),然后代码顺利地运行到if后面的语句,显示This is never displayed.。

要谨防这种错误。这是很容易犯的错误,而且因为它并不是非法的,因此不会产生编译错误。

2.2.3 值的真与假

任意值都可以解释成true或false。任意非零值都解释成true,而0则解释成false。下面的if语句验证了这一点:

   if (score)
   {
     cout << "At least you didn’t score zero.\n\n";
   }```
score的值为1000,因此它不等于0,被解释成true。结果显示消息At least you didn’t score zero.。

###2.2.4 使用关系运算符
在if语句中使用的最常见的表达式很有可能是用关系运算符比较值。这是接下来将要演示的。程序验证score是否大于等于250:

   if (score >= 250)
   {
     cout << "You scored 250 or more. Decent.nn";
   }`
因为score值为1000,所以执行if语句的代码块,显示消息说玩家得分还算可以。如果score小于250,程序将跳过代码块,继续执行后面的语句。

陷阱
 等于关系运算符是==(连续两个等于号),不要与赋值运算符=(一个等于号)混淆。虽然不使用关系运算符而使用赋值运算符并不是非法的,但结果可能出乎意料。看看这段代码:

int score = 500;
if (score = 1000)
{
     cout << " You scored 1000 or more. Impressive!\n";
}```
这段代码会将score赋值为1000,并显示消息You scored 1000 or more. Impressive!。事实是这样:尽管在if语句之前score值为500,但后来它的值发生了变化。当计算if语句的表达式(score = 1000)时,score被赋值为1000。该赋值语句的值为1000,是非零值,所以表达式解释成true,结果就显示了字符串。

要谨防这种错误。这是很容易犯的错误,而且在一些情况下(像以上情况)不会导致编译错误。
###2.2.5 if语句的嵌套
if可以让程序执行一条语句或一个包含多条语句的代码块。这个代码块可以包含其他if语句。if语句中包含另一个if语句称为嵌套。在下面代码中,以if (score >= 1000)开头的if语句嵌套在以if (score >= 500)开头的if语句中。

   if (score >= 500)
   {
     cout << "You scored 500 or more. Nice.nn";
     if (score >= 1000)
     {
        cout << "You scored 1000 or more. Impressive!n";
     }
   }`
因为score比500大,所以程序进入语句块,并显示消息You scored 500 or more. Nice.。然后在内部的if语句中,程序比较score与1000。因为score大于等于1000,程序显示消息You scored 1000 or more. Impressive!

提示
  if语句可以任意多层地进行嵌套。然而,如果嵌套得太深,代码将很难读懂,一般来说,我们将嵌套限制在几层以内。

相关文章
|
5月前
|
存储 安全 编译器
c++入门
c++作为面向对象的语言与c的简单区别:c语言作为面向过程的语言还是跟c++有很大的区别的,比如说一个简单的五子棋的实现对于c语言面向过程的设计思路是首先分析解决这个问题的步骤:(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。但对于c++就不一样了,在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:(1)黑白双方,这两方的行为是一样的。(2)棋盘系统,负责绘制画面。
86 0
|
7月前
|
C++
C++中if语句的条件分支使用
总的来说,`if`语句是C++中非常重要的一种控制结构,它使得程序能够根据不同的条件执行不同的操作。通过合理地使用 `if`语句,我们可以使程序更加灵活和强大。
233 10
|
9月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
8月前
|
存储 分布式计算 编译器
C++入门基础2
本内容主要讲解C++中的引用、inline函数和nullptr。引用是变量的别名,与原变量共享内存,定义时需初始化且不可更改指向对象,适用于传参和返回值以提高效率;const引用可增强代码灵活性。Inline函数通过展开提高效率,但是否展开由编译器决定,不建议分离声明与定义。Nullptr用于指针赋空,取代C语言中的NULL。最后鼓励持续学习,精进技能,提升竞争力。
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
147 2
C++入门12——详解多态1
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
212 1
|
存储 C++ 容器
C++入门9——list的使用
C++入门9——list的使用
153 1
|
C语言 C++ 容器
C++入门7——string类的使用-1
C++入门7——string类的使用-1
108 0
|
程序员 C语言 C++
C++入门5——C/C++动态内存管理(new与delete)
C++入门5——C/C++动态内存管理(new与delete)
245 1