c++使用一个函数表示多个变量.只有第一次运行有效
C++ using 1 function for multiple varaibles. Only first run works
c++新手,但研究了很多,所以请原谅我。
我一直在尝试使用一个函数来关联8个全局双变量[mA mB…]mG,取值范围为1 ~ 10],到另一个双精度值。我首先通过从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与下一个变量不工作?
在您的代码中,您将mA
设置为12,但Function1
没有12的情况。所以,我很惊讶你居然第一行就打印了110。您没有处理Function1
内部的情况,其中Mvalue1
不是所需值之一,因此这是要修复的第一件事。
同样,将一个数字赋值给双精度类型,然后返回它也不必要地复杂。如果您真的想传递整数,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;
}
不是函数中的所有路径都返回定义值,即在所有条件之后没有return
语句。编译器可能会告诉你。
在构建这样的关系时使用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
}
当我运行它时,这个程序似乎正在为我工作。但是,我不得不在VarFunction()
中添加mA2
, mB2
和mG2
的声明。在main()
中调用VarFunction()
之后,您还缺少分号。
我还建议您在函数double Function(double Mvalue1)
中返回一些默认的双精度,以防Mvalue1
不满足任何if语句。
如前所述,在所有if
语句为假的情况下,Function1()
应该返回一个值!
如果你正在处理的数字没有小数,使用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))
应用满足所需精度的公差值
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 比较C++变量的最有效方法
- 模板变量是否允许在多个翻译单元中并有效合并?
- 存储变量的更有效方法是什么?
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题
- 如何有效地实现将向量的数据分配给多个变量?
- 在 c++ 中使用右值设置类变量的最有效方法是什么
- 为什么这个带有 mov 算术的有效程序集在使用本地变量时无法编译
- 在 pthread_create() 中使用局部变量作为参数有效吗?
- 静态常量声明,变量的constexpr定义,有效的c ++?
- 如何有效地将底层数据从 std::string 移动到其他类型的变量?
- 移动变量是否有效,可以在 std::move 之后使用
- 如何有效地检测4个整数变量中的对称性
- 有效的问题 - 关于本地变量和全局变量,必须是基本的C/C 问题
- 只有先复制到临时变量中时,传递对字符串的引用才有效
- 将流定义为私有类变量似乎在Linux下有效,但在WindowsVisualStudio下无效
- 什么是有效的寄存器变量类型
- 从C++输入中收集数据时,是否有更有效的方法可以处理变量
- 使用类型推断声明变量是否与"classical way"变量名称后用括号初始化变量一样有效?