Stroustrup的P:PP第4章钻:被困

时间:2015-07-23 16:21:38

标签: c++

我坚持使用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";
        }
    }

}

2 个答案:

答案 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无论垃圾字符打破数字解析并循环回来再次尝试以下字符。

请注意,如果有一个好的号码然后是垃圾字符,那么好的号码将被丢弃,并且在跳过任何垃圾字符后它将开始寻找两个好的号码的序列。