我坚持使用Stroustrup的P:PP第4章练习,第5部分。问题要求我编写一个程序,该程序包含一个while循环,它读取2个双精度并终止程序。进入。该程序应输出两个,告诉你哪个更小和更大,以及它们是否相等或几乎相等。当数字在彼此的0.1之内时,我的定义几乎相等。我还编写了程序,以便在输入任何非双输入时终止,而不仅仅是|。
当我输入15.0和19.0时,我仍然被告知“值几乎相等”,而不是15.0更小而19.0更大。奇怪的是,如果我输入19.0和15.0,它会告诉我较小的值是15,较大的值是19.如果我输入15.0和15.0,它确实告诉我现在的值是相等的。
基本上,如果x < y,我以“x y”的顺序输入“几乎相等”,但如果我输入“y x”,我会告诉我x更小,y更大。否则,没有错误。
有什么建议吗?
#include "../../../std_lib_facilities.h"
int main()
{
double val1 = 0;
double val2 = 0;
cout << "Enter 2 values: \n";
while (cin >> val1 >> val2) {
if (val1 < val2) {
cout << "The smaller value is " << val1 << " and the bigger value is " << val2 << '\n';
}
else if (val1 == val2) {
cout << "Both values are equal.\n";
}
else if (val1 > val2) {
cout << "The smaller value is " << val2 << " and the bigger value is " << val1 << '\n';
}
else (val1 - val2 <= 0.01 && val1 != val2 || val2 - val1 <= 0.01 && val1 != val2) {
cout << "The values are almost equal.\n";
}
}
}
答案 0 :(得分:0)
问题在于你的“if-else”条件:这很重要,因为只要满足一个这样的条件,就不会再检查其他条件了。
答案 1 :(得分:0)
此...
else (val1 - val2 <= 0.01 && val1 != val2 || val2 - val1 <= 0.01 && val1 != val2) {
应该将else
替换为if
,这样 - 无论先前的输出如何,它都会测试这个特定条件,并且可以打印&#34;几乎等于&#34;消息
需要修复条件:如果您将val1 - val2
的绝对值与0.01
阈值进行比较,那么您的逻辑就会起作用(但就像现在一样,它& #39; s总是true
); hint
让程序仅在&#39; |&#39;输入有点棘手 - 你可以将你的currrent while
循环包装成这样的东西:
do
{
while (cin >> val1 >> val2) etc. as you have now...
} while (!cin.eof() && cin.clear() && cin.peek() != '|' && cin.ignore(1);
如果您在输入结束时退出,否则clear
出现流错误状态,请检查下一个字符是否为'|'
,以及是否&#39} #39; s不是ignore
无论垃圾字符打破数字解析并循环回来再次尝试以下字符。
请注意,如果有一个好的号码然后是垃圾字符,那么好的号码将被丢弃,并且在跳过任何垃圾字符后它将开始寻找两个好的号码的序列。