对C ++有点兴趣,但一直在研究很多,请耐心等待。
我一直在尝试使用1个函数将8个全局双变量[mA mB ... mG,范围从值1到10]与另一个double值相关联。 我首先通过从csv文件获取数据,将它们抛出到数组然后等同设置的全局变量来获得这8个变量。 这一切都运行良好。我正确地评估了这些值。
mA =10, mB=1 ,.... mG=2
但是我需要使用这些变量来关联另一个设定值。所以我使用:
double Function1(double Mvalue1)
{
if (Mvalue1 == 1) { double value = 10; return value ; }
if (Mvalue1 == 2) { double value = 20; return value ; }
.... // cont to 10 only increasing value by 10
if (Mvalue1 == 10) { double value = 110; return value ; }
}
void VarFunction()
{
mA2= Function1(mA); **//SHOULD output 110**
cout << "Vaule A " << mA2 << endl;
mB2= Function1(mB); **//SHOULD output 10**
cout << "Vaule B " << mB2 << endl;
....//.... 8 times
mG2 = Function1(mG); **//SHOULD output 20**
cout << "Vaule G " << mG2 << endl;
}
int main()
{
VarFunction()
return 0;
}
所以我到这里的输出是
Value A 110
Value B -1.#IND
....
Value G -1.#IND
为什么下一个变量不能正常工作时,下一次调用function1?
答案 0 :(得分:1)
在你的代码中,mA
设置为12,但Function1
没有12个案例。所以,我很惊讶你甚至得到了110打印第一行。您无法处理Function1
内Mvalue1
不是所需值之一的案例,因此这是首先要解决的问题。
此外,将数字分配给double然后返回它是不必要的复杂。假设你真的想要传递整数,case语句会运行良好:
double Function1(int Mvalue1)
{
switch(Mvalue1) {
case 1: return 10;
case 2: return 20;
//...
case 10: return 110; // are you sure you don't want 100?
default: return -1; // handle the case here so that you always return a value.
}
}
当然,如果你真的只想要输入10倍,为什么不呢:
double Function1(double mValue1)
{
return mValue1*10;
}
答案 1 :(得分:0)
并非函数中的所有路径都返回一个定义的值,即在所有条件之后都没有return
语句。
编译器可能会告诉你。如果不是 - 用更高的警告级别编译。
答案 2 :(得分:0)
在构建此类关系时使用std::map容器。
#include <iostream>
#include <map>
typedef std::map<double, double> rel_t;
int main()
{
rel_t mymap;
// You can directly
// std::map<double, double> mymap;
mymap[1] = 10;
mymap[2] = 20;
mymap[10] = 110;
std::cout << mymap[1] << std::endl; // Prints 10
std::cout << mymap[2] << std::endl; // Prints 20
std::cout << mymap[10] << std::endl; // Prints 110
}
答案 3 :(得分:0)
当我运行它时,这个程序似乎对我有用。但是,我必须在mA2
中添加mB2
,mG2
和VarFunction()
的声明。在VarFunction()
中致电main()
后,您还错过了分号。
我还建议你在函数double Function(double Mvalue1)
中返回一些默认的double,以防Mvalue1
不满足任何if语句。
答案 4 :(得分:0)
如上所述,Function1()
应该返回一个值,以防所有if
语句都为假!
如果您正在处理的数字没有小数位数,请对变量使用short
,int
,long
或任何其他整数类型。然后,您可以使用switch()
/ case
构造,或继续使用比较运算符==
。
如果您必须处理浮点值,请不要使用==
运算符!从文本文件(如CSV)或数据库中读取浮点值时,将完成从文本到float
/ double
的转换。这种转换的结果可以以例如9.999999999或10.000000001而不是10.然后与==
的比较为false
!
要比较两个双变量,请使用如下方法:
bool dEqual( double dVal1, double dVal2, double dTolerance)
{
if( fabs( dVar1 - dVar2) < dTolerance) {
// dVar1 is nearly equal to dVar2
return true;
}
// dVar1 is not equal to dVar2
return false;
}
然后这种比较是正确的:
if( dEqual( 10.0, 9.999999998, 0.000001))
应用符合您所需准确度的公差值。