首页 > 解决方案 > 关于 C++ 中的默认参数

问题描述

我正在寻求帮助以了解: - 在这个程序中:

#include <iostream>

int main() 
{
    int j = 0;
    int k = 1;
    int m = -1;
    int n = 1;

    int p = ((j * 300) - (4 * n) - (7 * m)); 

    if (int l = ((j * 300) - (4 * n) - (7 * m)) > 0) {
        std::cout << "l is egual: " << l - 1 << std::endl;
    }   
    else {
        std::cout << "l is negative: " << l << std::endl;
    }

    if (p > 0) {
        std::cout << "p is egual: " << p - 1 << std::endl;
    }   
    else {
        std::cout << "p is negative: " << p << std::endl;
    }

    return 0;
}

我得到了输出: gcc circonfEn.cc -lstdc++ -o circonfEn ./circonfEn
l is egual: 0 p is egual: 2

为什么if中的指令不起作用?

标签: c++

解决方案


您的代码本质上意味着(以 的范围为模l):

int l = ((j * 300) - (4 * n) - (7 * m)) > 0;
if (l != 0) {
    std::cout << "l is egual: " << l - 1 << std::endl;
}   
else {
    std::cout << "l is negative: " << l << std::endl;
}

由于>返回 a bool,因此 的值l始终为01

代码应改写为:

int l = (j * 300) - (4 * n) - (7 * m);
if (l > 0) {
    std::cout << "l is egual: " << l - 1 << std::endl;
}   
else {
    std::cout << "l is negative: " << l << std::endl;
}

或者:

if (int l = (j * 300) - (4 * n) - (7 * m); l > 0) {
    std::cout << "l is egual: " << l - 1 << std::endl;
}   
else {
    std::cout << "l is negative: " << l << std::endl;
}

推荐阅读