我正在以Bjarne Stroustrup编程原理和实践(4.64练习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";
}
}
}
“我不能缩小”是迄今为止最小的。
我正在自学,所以如果我的代码中的任何内容不正确或最佳做法,请让我知道。
先谢谢您
答案 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
,因为对于第一轮,两者都适用。至于第三种情况,则不确定该做什么。