If语句在C ++中始终为false

时间:2019-06-17 16:56:21

标签: c++

我正在以Bjarne Stroustrup编程原理和实践(4.64练习6)的方式工作,由于某种原因,我无法使“如果”成立。

  • 我已经将变量初始化为-1000。
  • 我无法初始化为空。
  • 我已经尝试过声明它们
  • 我尝试过更改变量的顺序。

我在堆栈溢出中发现的问题与我的代码有很大不同。 我目前添加了一个我以前没有使用过的向量。

double val1 = 0;  // initialized

double smaller; // initialized
double larger = 0;  // initialized


vector<double> compare; // empty vector of doubles


int main ()
{
    cout << "Please input a value, us | to stop\n"; // put into

    while (cin >> val1)   // cin "get from"
    {
        compare.push_back(val1);

        if (val1 < smaller)
        {
            smaller = val1; // assignment giving a variable a new value
            cout << val1 << " is the smallest so far \n" ;
            compare.push_back(smaller);
        }
        else if (val1 > larger)
        {
            larger = val1;   // assignment giving a variable a new value
            cout << val1 << " is the largest so far \n";
            compare.push_back(larger);
        }
        else
        {
            cout << val1 << " error\n";
        }
    }
}

“我不能缩小”是迄今为止最小的。

我正在自学,所以如果我的代码中的任何内容不正确或最佳做法,请让我知道。

先谢谢您

2 个答案:

答案 0 :(得分:1)

输入的第一个值必须为两者较大 smaller ,无论该值是什么,您都需要初始化 smaller INFINITY(所有有效值都较小)和 larger -INFINITY(所有有效值都较大)并删除 else 要使两个子句对第一个值有效,则第三子句没有意义,必须将其删除。

使用全局变量是否也没有用,我鼓励您尽可能不使用全局变量。

因为可以多次输入相同的值,也许您想要一个 set 而不是一个 vector 来保存多次相同的值?但是,在...

之后不要使用 compare

您只写一次消息请输入... ,在这种情况下,说请输入值 s 更一致...或替换

cout << "Please input a value, us | to stop\n"; // put into

while (cin >> val1)   // cin "get from"
{

作者

while (cout << "Please input a value, invalid value or EOF to stop" << endl,
       cin >> val)   // cin "get from"

您的代码可以更改为:

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int main ()
{
  double val;
  double smaller = INFINITY; // initialized
  double larger = -INFINITY;  // initialized
  vector<double> compare; // empty vector of doubles

  cout << "Please input values, give an invalid value or EOF to stop" << endl; // put into

  while (cin >> val)   // cin "get from"
  {
    compare.push_back(val);

    if (val < smaller)
    {
      smaller = val; // assignment giving a variable a new value
      cout << val << " is the smallest so far" << endl;
      compare.push_back(smaller);
    }

    if (val > larger)
    {
      larger = val;   // assignment giving a variable a new value
      cout << val << " is the largest so far" << endl;
      compare.push_back(larger);
    }
  }

  // do something with compare ?

  return 0;
}

执行:

pi@raspberrypi:/tmp $ ./a.out
Please input values, give an invalid value or EOF to stop
1234
1234 is the smallest so far 
1234 is the largest so far 
1
1 is the smallest so far 
222
222222
222222 is the largest so far 
-123
-123 is the smallest so far 
23
45
aze
pi@raspberrypi:/tmp $ 

答案 1 :(得分:0)

将变量初始化为INFINITY

double smaller =  INFINITY;
double larger  = -INFINITY;

第一个值将小于或大于任何一个,因此您不必限制它们的值范围。

edit:正如评论中的某人所指出的,您还必须删除较小/较大部分之间的else,因为对于第一轮,两者都适用。至于第三种情况,则不确定该做什么。