繁体   English   中英

if 语句在 C++ 中总是假的

[英]If statement is always false in c++

我正在按照 Bjarne Stroustrup 编程原则和实践(4.64 Drill #6)的思路工作,但出于某种原因,我无法确定“如果”为真。

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

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

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";
        }
    }
}

我不能变小“是迄今为止最小的印刷品。

我正在自学,因此如果我的代码中的任何内容不正确或最佳实践,请让我知道任何输入将不胜感激。

先感谢您,

将变量初始化为INFINITY

double smaller =  INFINITY;
double larger  = -INFINITY;

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

编辑:正如评论中有人指出的那样,您还必须删除较小/较大部分之间的else ,至于第一轮,两者都适用。 至于第三种情况,不确定这是什么意思。

第一个值输入必须较大较小无论是值,你需要初始化INFINITY (所有有效值较小),并用较大-INFINITY (所有有效值较大),并删除别的让两个子句对第一个值有效,第三个子句没有意义,必须删除。

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

因为可以多次输入相同的值,也许您想要一个集合而不是一个向量来不保存多次相同的值? 但是,您在...之后不使用比较

你写的消息Please input...只写一次,这种情况下说Please input value s ... 或replace 更一致

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 $ 

暂无
暂无

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

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