c++ - 如何只运行一个 if 语句并忽略 C++ 函数中的另一个?
问题描述
我是 C++ 的完全初学者,这段代码肯定做得很糟糕,但现在我试图为SierraChart编写一个简单的图表指标。在为山脉图表编写图表指标时,图表指标的所有代码都进入一个函数,我被困在这部分。
我只需要跑过去的最后一个方向。当前代码最终发生的情况是两者最终同时运行,因为两个条件最终都为真。
我已经为第二个方向尝试了 else if,并且在 if 块中尝试了一些布尔条件来尝试只运行最后一个方向,但这似乎并不能解决问题。
我该如何解决这个问题?
int &barCount = sc.GetPersistentInt(0);
float &longCount = sc.GetPersistentFloat(0);
float &shortCount = sc.GetPersistentFloat(0);
float Highest = sc.GetHighest(sc.BaseDataIn[SC_HIGH], barCount);
float Lowest = sc.GetLowest(sc.BaseDataIn[SC_LOW], barCount);
sc.MovingAverage(sc.BaseData[Input_MA1Price.GetInputDataIndex()], sc.Subgraph[2], Input_MA1Type.GetMovAvgType(), Input_MA1Length.GetInt());
sc.MovingAverage(sc.BaseData[Input_MA2Price.GetInputDataIndex()], sc.Subgraph[3], Input_MA2Type.GetMovAvgType(), Input_MA2Length.GetInt());
int direction = sc.CrossOver(sc.Subgraph[2], sc.Subgraph[3]);
if (direction == CROSS_FROM_BOTTOM)
{
barCount = 0;
longCount = 0;
}
if (sc.GetBarHasClosedStatus(sc.Index) == BHCS_BAR_HAS_CLOSED)
{
barCount++;
barCounter[sc.Index] = barCount;
if (sc.BaseData[SC_HIGH][sc.Index] == Highest)
{
longCount = 0;
}
if (sc.BaseData[SC_HIGH][sc.Index] > sc.BaseData[SC_HIGH][sc.Index - 1] && sc.BaseData[SC_HIGH][sc.Index] < Highest)
{
longCount++;
highPrice[sc.Index] = longCount;
if (sc.BaseData[SC_HIGH][sc.Index - 2] < sc.BaseData[SC_HIGH][sc.Index - 1] && sc.BaseData[SC_HIGH][sc.Index] < Highest)
{
longCount--;
highPrice[sc.Index] = 0;
}
}
}
if (direction == CROSS_FROM_TOP)
{
barCount = 0;
shortCount = 0;
}
if (sc.GetBarHasClosedStatus(sc.Index) == BHCS_BAR_HAS_CLOSED)
{
barCount++;
barCounter[sc.Index] = barCount;
if (sc.BaseData[SC_LOW][sc.Index] == Lowest)
{
shortCount = 0;
}
if (sc.BaseData[SC_LOW][sc.Index] < sc.BaseData[SC_LOW][sc.Index - 1] && sc.BaseData[SC_LOW][sc.Index] > Lowest)
{
shortCount++;
lowPrice[sc.Index] = shortCount;
if (sc.BaseData[SC_LOW][sc.Index - 2] > sc.BaseData[SC_LOW][sc.Index - 1] && sc.BaseData[SC_LOW][sc.Index] > Lowest)
{
shortCount--;
lowPrice[sc.Index] = 0;
}
}
}
解决方案
您的缩进与 if 语句的逻辑不匹配(并且 C++ 不关心缩进。尝试在每个主要(最外层)if 语句之后将整个缩进位包装在它们自己的大括号中。:
int &barCount = sc.GetPersistentInt(0);
float &longCount = sc.GetPersistentFloat(0);
float &shortCount = sc.GetPersistentFloat(0);
float Highest = sc.GetHighest(sc.BaseDataIn[SC_HIGH], barCount);
float Lowest = sc.GetLowest(sc.BaseDataIn[SC_LOW], barCount);
sc.MovingAverage(sc.BaseData[Input_MA1Price.GetInputDataIndex()], sc.Subgraph[2], Input_MA1Type.GetMovAvgType(), Input_MA1Length.GetInt());
sc.MovingAverage(sc.BaseData[Input_MA2Price.GetInputDataIndex()], sc.Subgraph[3], Input_MA2Type.GetMovAvgType(), Input_MA2Length.GetInt());
int direction = sc.CrossOver(sc.Subgraph[2], sc.Subgraph[3]);
if (direction == CROSS_FROM_BOTTOM)
{
{
barCount = 0;
longCount = 0;
}
if (sc.GetBarHasClosedStatus(sc.Index) == BHCS_BAR_HAS_CLOSED)
{
barCount++;
barCounter[sc.Index] = barCount;
if (sc.BaseData[SC_HIGH][sc.Index] == Highest)
{
longCount = 0;
}
if (sc.BaseData[SC_HIGH][sc.Index] > sc.BaseData[SC_HIGH][sc.Index - 1] && sc.BaseData[SC_HIGH][sc.Index] < Highest)
{
longCount++;
highPrice[sc.Index] = longCount;
if (sc.BaseData[SC_HIGH][sc.Index - 2] < sc.BaseData[SC_HIGH][sc.Index - 1] && sc.BaseData[SC_HIGH][sc.Index] < Highest)
{
longCount--;
highPrice[sc.Index] = 0;
}
}
}
}
if (direction == CROSS_FROM_TOP)
{
{
barCount = 0;
shortCount = 0;
}
if (sc.GetBarHasClosedStatus(sc.Index) == BHCS_BAR_HAS_CLOSED)
{
barCount++;
barCounter[sc.Index] = barCount;
if (sc.BaseData[SC_LOW][sc.Index] == Lowest)
{
shortCount = 0;
}
if (sc.BaseData[SC_LOW][sc.Index] < sc.BaseData[SC_LOW][sc.Index - 1] && sc.BaseData[SC_LOW][sc.Index] > Lowest)
{
shortCount++;
lowPrice[sc.Index] = shortCount;
if (sc.BaseData[SC_LOW][sc.Index - 2] > sc.BaseData[SC_LOW][sc.Index - 1] && sc.BaseData[SC_LOW][sc.Index] > Lowest)
{
shortCount--;
lowPrice[sc.Index] = 0;
}
}
}
}
推荐阅读
- javascript - LoopbackJS 获取经过身份验证的 UserId 以存储在模型中,而不通过 API 公开它
- firebase - Firebase DB:如何获取数据更新时间戳?
- ruby - Rails 中的迁移返回找不到表错误
- excel - 如何计算唯一的呼叫者数量(按代理)但如果呼叫者存在于另一个代理名称下的另一个表上,那么不要将其视为他的呼叫者?
- c# - 从 URL 读取 XML 数据
- go - 创建处理程序是如何工作的?
- asynchronous - Vuex 状态更改不会触发页面上的反应
- runtime-error - 如何配置 alfresco 以运行脚本任务
- python - 在 Python 中,range(1, 100, *10) 不起作用?
- javascript - window.location.reload 后如何在 Cordova 中清除意图