使用 if 语句的代码卡住了
Stuck with code using if statements
这可能是
一个无意义的问题,但我有点卡住了,所以我想知道是否有人可以提供帮助。我有以下代码:
bool while_condition=false;
do{
if(/*condition*/){
//code
}
else if(/*condition*/){
//code
}
else if(/*condition*/){
//code
}
...//some more else if
else{
//code
}
check_for_do_while_loop(while_condition, /*other parameters*/);
}while(while_condition);
各种if
和else if
相互排除,但每个if
都有其他;如果满足某个条件(不能在单个 if 语句中指定),则代码返回一个值,do while
循环结束。但是,如果在进入单个else if
后,不满足内部条件,则代码退出而不实际执行任何操作,并且while循环重新启动整个循环。
我希望程序记住他输入的位置并避免代码的那部分,即避免他输入的特定else if
没有任何结果,因此他可以尝试输入另一个else if
。我想过将布尔值与语句相关联,但我不太确定如何做到这一点。有没有一种方法可以让我不过度修改代码结构?
为了说明一种避免变量负载的方法,下面概述了如何对解决方案进行数据驱动。
class TestItem
{
public:
typedef bool (*TestFuncDef)(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr);
TestItem(TestFuncDef test_fn_parm)
{
test_fn = test_fn_parm;
already_invoked = false;
}
bool Invoke(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr)
{
already_invoked = true;
return test_fn(state_to_test, result_ptr);
}
bool AlreadyInvoked() const {return already_invoked; }
private:
TestFuncDef test_fn;
bool already_invoked;
};
std::shared_ptr<result_type> RunTest(std::list<TestItem>& test_item_list, state_type& state_to_test)
{
for(;;) {
bool made_a_test = false;
for (TestItem& item : test_item_list) {
std::shared_ptr<result_type> result_ptr;
if (!item.AlreadyInvoked()) {
made_a_test = true;
if (item.Invoke(state_to_test, result_ptr)) {
return result_ptr;
}
else
continue;
}
}
if (!made_a_test)
throw appropriate_exception("No conditions were matched");
}
}
这不应该是问题的完整解决方案,但建议另一种解决方法。
此处未记录的重要步骤是构建要传递给 RunTest 的 TestItems 的 std::列表。执行此操作的代码可能如下所示
std::list<TestItem> test_item_list;
test_item_list.push_back(TestItem(ConditionFn1));
test_item_list.push_back(TestItem(ConditionFn2));
ConditionFn1 的定义可能如下所示
bool ConditionFn1(const state_type& state_to_test, std::shared_ptr<result_type>& result_ptr)
{
// Do some work
if (....)
return false;
else {
result_ptr.reset(new result_type(some_args));
return true;
}
}
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 为什么在此C++代码中触发此 if 语句?
- 什么可以用来替换代码中的循环和 if 语句?
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 条件不变的 if 语句会减慢我的C++代码吗?
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 有人能在我的代码中找到与C++中的IF语句相关的问题吗
- 代码样式:在 switch/if 语句的分支中重用控件表达式或控制变量
- 为什么我的代码在第一个 if 语句处中断?
- 我很难为 if/else 语句编写此赋值的代码.这是第一堂编程课
- 需要消除这些"else if"并优化代码
- MSVC编译器拆卸代码来自if/else语句
- 如何在没有'switch'和'if-else'条件的情况下重写以下代码?
- "check if member exists using enable_if"中修改的代码不起作用
- 如何避免使用多个if-else来检查返回值是否为错误代码?
- 退出代码 -1073741510 在 bool if 语句处
- "[Error] expected unqualified-Id before 'if'"这个代码块是什么意思
- 从编译器优化和代码性能的角度来看,"if constexpr"与"if"
- 有没有修复我的代码没有将 int 声明为我在 if else 循环中选择的内容
- 为什么我的 if else 代码不起作用?