[英]If statement is always false in c++
我正在按照 Bjarne Stroustrup 编程原则和实践(4.64 Drill #6)的思路工作,但出于某种原因,我无法确定“如果”为真。
我在堆栈溢出时发现的问题我的代码与他们的有很大不同。 我目前添加了一个我之前没有使用过的向量。
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.