C++ if语句完全指南:条件语句与控制流

假设你要去市场,你的室友告诉你:“如果草莓在打折,就买一些。” 这是一个条件语句,意思是:你只会在某个条件为真时(“草莓在打折”)执行某个动作(“买一些”)。

这类条件在编程中非常常见,它们使我们可以在程序中实现有条件的行为。C++ 中最简单的条件语句叫作 if 语句。if 语句允许我们仅在某个条件为真时执行一行或多行代码。

if语句的基本语法

最简单的 if 语句格式如下:

if (condition) true_statement;

为了可读性,通常写成如下形式:

if (condition)
    true_statement;

其中 condition(条件)是一个会被计算为布尔值的表达式。

  • 如果 condition 的结果为 true,则执行 true_statement
  • 如果结果为 false,则跳过该语句。

if语句实例演示

#include <iostream>

int main()
{
    std::cout << "Enter an integer: ";
    int x {};
    std::cin >> x;

    if (x == 0)
        std::cout << "The value is zero\n";

    return 0;
}

运行结果(示例):

Enter an integer: 0
The value is zero

说明:

  • 用户输入一个整数;
  • 条件 x == 0 被计算;
  • 若结果为 true,打印对应信息。

再看另一次运行:

Enter an integer: 5

因为条件为假,所以不会输出任何信息。

⚠️ 注意:if 语句默认只控制它后面的一条语句。如果需要控制多条语句,参见第 8.2 课《If statements and blocks》。

if-else结构详解

想要处理"非零"的情况,代码可能写成这样:

if (x == 0)
    std::cout << "The value is zero\n";
if (x != 0)
    std::cout << "The value is non-zero\n";

或这样:

bool zero { (x == 0) };
if (zero)
    std::cout << "The value is zero\n";
if (!zero)
    std::cout << "The value is non-zero\n";

更简洁的方式是使用 if-else

if (x == 0)
    std::cout << "The value is zero\n";
else
    std::cout << "The value is non-zero\n";

运行示例:

Enter an integer: 0
The value is zero

Enter an integer: 5
The value is non-zero

链式if语句的使用

有时我们要依次判断多个条件,可以使用 else if 结构:

if (x > 0)
    std::cout << "The value is positive\n";
else if (x < 0)
    std::cout << "The value is negative\n";
else
    std::cout << "The value is zero\n";

运行示例:

Enter an integer: 4
The value is positive

Enter an integer: -3
The value is negative

Enter an integer: 0
The value is zero

布尔函数与if语句的结合

回顾我们上一课写过的函数:

bool isEqual(int x, int y)
{
    return x == y;
}

我们可以使用 if 让输出更人性化:

if (isEqual(x, y))
    std::cout << x << " and " << y << " are equal\n";
else
    std::cout << x << " and " << y << " are not equal\n";

运行示例:

Enter an integer: 5
Enter another integer: 5
5 and 5 are equal

Enter an integer: 6
Enter another integer: 4
6 and 4 are not equal

非布尔条件的处理

如果条件表达式不是布尔值,会发生什么? 答:它会被转换成布尔值。

  • 非零数值 → true
  • 0 → false

示例:

int x { 4 };
if (x)
    std::cout << "hi\n";
else
    std::cout << "bye\n";

输出:

hi

💡 关键理解: if (x) 的含义是:“如果 x 非零/非空”。

提前返回技术

提前返回 指函数中在末尾前就使用 return 返回值。

示例(无意义的提前返回):

void print()
{
    std::cout << "A\n";
    return;
    std::cout << "B\n"; // 永远不会执行
}

但配合 if,提前返回可以提高函数的清晰度:

int abs(int x)
{
    if (x < 0)
        return -x;

    return x;
}

示例输出:

std::cout << abs(4);  // 4
std::cout << abs(-3); // 3

📝 小历史:过去程序员不太提倡提前返回;现代编程中,为了简洁和错误处理,适当使用是推荐的。

练习题

问题1

什么是提前返回?它的行为是什么?

问题2

编写一个程序,要求用户输入一个 0 到 9 之间的整数。如果是质数(2, 3, 5, 7),打印"The digit is prime",否则打印"The digit is not prime"。

问题3

以下代码如何在不改变格式的情况下简化?

bool isAllowedToTakeFunRide()
{
  std::cout << "How tall are you? (cm)\n";
  double height{};
  std::cin >> height;

  if (height >= 140.0)
    return true;
  else
    return false;
}

如果你还想让我翻译后面的练习解答或延续的内容,也欢迎继续发我。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"