流程控制#

if#

#include <iostream>

using namespace std;

int main() {
    int num = 10;
    if (num < 5) cout << "The number is less than 5. " << endl;

    if (num == 5) {
        cout << "The number is 5." << endl;
    } else {
        cout << "The number is not 5." << endl;
    }

    if (num < 5)
        cout << "The number is less than 5." << endl;
    else if (num > 10)
        cout << "The number is greater than 10." << endl;
    else
        cout << "The number is in range [5, 10]." << endl;

    if (num < 20)
        if (num < 5)
            cout << "The number is less than 5" << endl;
        else
            cout << "Where I'm?" << endl;

    return 0;
}

Note

不要用 if (p) 来判断 new 是否成功:new 分配失败时会抛出 std::bad_alloc 异常, 并不会返回空指针,因此下面的判断是死代码。只有在使用 new(std::nothrow) 时才会返回空指针。

int* p = new int[1024];   // 失败时抛出异常
// if (p) ...              // 该判断永远不会为假

int* q = new (std::nothrow) int[1024];
if (q == nullptr) { /* 处理分配失败 */ }

## for

```cpp
#include <iostream>

using namespace std;

int main() {
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += i;
        cout << "Line " << i << endl;
    }
    cout << "sum = " << sum << endl;

    return 0;
}

while / do-while / break#

#include <iostream>

using namespace std;

int main() {
    int num = 10;
    while (num > 0) {
        cout << "num = " << num << endl;
        num--;
    }

    // num = 10;
    // do
    // {
    //     cout << "num = " << num << endl;
    //     num--;
    // } while (num > 0);

    // num = 10;
    // while (num > 0)
    // {
    //     if (num == 5)
    //         break;
    //     cout << "num = " << num << endl;
    //     num--;
    // }
    return 0;
}

switch#

#include <iostream>

using namespace std;

int main() {
    unsigned char input_char = 0;

    cout << "Please input a character to start." << endl;
    cin >> input_char;
    while (input_char != 'q') {
        switch (input_char) {
        case 'a':
        case 'A': cout << "Move left. Input 'q' to quit." << endl; break;
        case 'd':
        case 'D': cout << "Move right. Input 'q' to quit." << endl; break;
        default: cout << "Undefined key. Input 'q' to quit." << endl; break;
        }
        cin >> input_char;
    }
}

goto#

goto 只能在函数内部跳转,常被用于统一错误处理出口,避免重复的清理代码。

#include <iostream>

using namespace std;

float mysquare(float value) {
    float result = 0.0f;

    if (value >= 1.0f || value <= 0) {
        cerr << "The input is out of range." << endl;
        goto EXIT_ERROR;
    }
    result = value * value;
    return result;

EXIT_ERROR:
    // do sth such as closing files here
    return 0.0f;
}

int main() {
    float value;
    cout << "Input a floating-point number." << endl;
    cin >> value;

    float result = mysquare(value);

    if (result > 0) cout << "The square is " << result << "." << endl;

    return 0;
}

三目运算符 ? :#

#include <iostream>

using namespace std;

int main() {
    bool isPositive = true;
    int factor      = 0;
    // some operations may change isPositive's value
    if (isPositive)
        factor = 1;
    else
        factor = -1;
    // the if-else statement can be replaced by a ternary conditional operation
    factor = isPositive ? 1 : -1;

    // sometimes the following code can be more efficient.
    factor = isPositive * 2 - 1;

    return 0;
}