繁体   English   中英

无法计算出该小C ++程序的最后一个程序,该程序以数字顺序打印数字

[英]Cannot work out the last of this little C++ program that prints numbers in numerical sequence

我目前正在经历“编程:使用C ++的原理和实践”,我还不能完全完成一项特定的练习。 在该程序中,用户将输入三个随机数,然后程序将按数字顺序返回这些数字。 如果第一个和第二个数字输入的最低,那么它们将正确返回,但是第三个和第二个数字不是,并且我不确定为什么。 这是代码:

int main()
{
    string barn;



    int val1 = 0, val2 = 0, val3 = 0;

    cout << "Enter the first number: ";
    cin >> val1;

    cout << "Enter the second number: ";
    cin >> val2;

    cout << "Enter the third number: ";
    cin >> val3;


    if (val1 < val2 && val3)
    {
        cout << val1 << " "; 

        if (val1 < val2)
        {
            cout << val2 << " ";
            cout << val3 << " ";
        }

        else
        {
            cout << val3 << " ";
            cout << val2 << " ";
        }
    }

    else if (val2 < val1 && val3)
    {
        cout << val2 << " ";

        if (val2 < val1)
        {
            cout << val1 << " ";
            cout << val3 << " ";
        }

        else
        {
            cout << val3 << " ";
            cout << val1 << " ";
        }
    }

    else if(val3 < val1 && val2)
    {
        cout << val3 << " ";

        if (val3 < val1)
        {
            cout << val1 << " ";
            cout << val2 << " ";
        }

        else
        {
            cout << val2 << " ";
            cout << val1 << " ";
        }
    }

    cin >> barn;
}

1 3 5打印:1 3 5. 3 1 5打印:1 3 5. 3 5 1打印:3 5 1`-这是我的问题所在。 第二个else if语句似乎无法正常工作,我不确定为什么。

这不符合您的想法:

if (val1 < val2 && val3)

当( val1大于val2 )AND( val3计算结果不同于0 )时,您的if条件为true

你应该做if (val1 < val2 && val1 < val3)

其他if语句也适用相同的规则。

另外,您的内部if语句不正确。 示例:一旦检查val1 < val2 && val1 < val3 ,则应检查val2 < val3 下面是您的第一个if语句的示例:

if (val1 < val2 && val1 < val3)
{
    cout << val1 << " "; 

    if (val2 < val3)
    {
        cout << val2 << " ";
        cout << val3 << " ";
    }

    else
    {
        cout << val3 << " ";
        cout << val2 << " ";
    }
}

最后,您应该考虑用户多次输入相同值的情况。

顺便说一句,351不会使您进入if语句的第三位。 检查您的操作员优先级或完全写出您的操作员,例如:

else if ((val3 < val1) && (val3 < val2)) 

另请参阅: http : //en.cppreference.com/w/cpp/language/operator_precedence

Imo,您应该始终完全写出您的运算符,特别是如果您是该语言的新手,那确实有帮助。 :)

这个:

if(val1 < val2 && val3){...}

并不意味着您认为的那样。 正确的写法是:

if((val1 < val2) && (val1 < val3)){...}

多余的括号可能不是必需的,但是在这种情况下,我的规则比后悔更好:)

什么:

if(val1 < val2 && val3){...}

的确是如果布尔值(val1 < val2)(val3)为true,则返回true。 如果val3 不为零 (** cf EDIT节),则(val3)的评估结果为true,否则评估为false。

更改您的代码以考虑到这一点,然后告诉我们是否可行,我没有检查其余的是否正确。

编辑

编辑我的答案是说除0以外的任何值都被评估为true。

没错,谢谢:)我认为了解别人的误解对其他人可能有用。

  1. 我在C ++文档中找不到对此的任何引用,但这很好,这是我所假设的每种语言的规范。
  2. 表达式(5 == true)返回false,但是将(5)评估为true。 我想这是因为在(5 == true)中,将true转换为int值1,并且比较是在int值之间,而不是布尔值之间。 (true == 5)也返回false。

当然,这肯定是一个初学者的错误,我将其作为进行显式条件测试的一课,而从不信任该程序来按我的意愿对其进行评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM