[英]My c++ program that reads in a matrix and prints out the non-zero numbers is generating a runtime error
[英]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。
没错,谢谢:)我认为了解别人的误解对其他人可能有用。
当然,这肯定是一个初学者的错误,我将其作为进行显式条件测试的一课,而从不信任该程序来按我的意愿对其进行评估。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.