基本问题,但想知道这样做的优化方法。它是一个关闭例程的代码块,有多个进程关闭。在所有情况下,它应该尝试关闭所有进程和阶段,但保持失败值返回。
Error_code result=PASS;
<some code>
for i 1 to 10
if((result = operation())!=PASS)
PRINT "FAILURE"
done
if((result = operation())!=PASS)
PRINT "FAILURE"
for i 1 to 10
if((result = operation())!=PASS)
PRINT "FAILURE"
done
return result;
现在问题是如果最后一次迭代是Pass,那么它返回一个PASS,因为操作应该在所有10次迭代中运行,并且在失败的情况下,只是我们需要返回错误代码。因为它几乎可以有100次失败,所以我写下这样的代码: -
Error_code result=PASS;
Error_code tresult=PASS;
for i 1 to 10
if((result = operation())!=PASS) {
tresult = result;
PRINT "FAILURE"
}
if((result = operation())!=PASS) {
tresult = result;
PRINT "FAILURE"
}
for i 1 to 10
if((result = operation())!=PASS)
tresult = result;
PRINT "FAILURE"
done
if(tresult != result)
result = tresult;
return result;
它是唯一的优化解决方案,还是我们可以做得更好。我不能使用标志,因为它有超过100个错误变量.. 建议任何更好的方式..
答案 0 :(得分:2)
您需要为链接列表或数组中的每个错误代码动态分配空间,然后将列表传递回需要知道结果的任何内容。
您可以为每个正在关闭的进程设置代码并在其中包含“OK”情况,或者您可以将进程ID和错误代码一起包含在内,并且只在出现错误时才包含它们。
例如:
errorList = NULL;
for i 1 to 10
if((result = operation())!=PASS) {
appendToList(errorList, i, result)
}
if(errorList != NULL) {
result = ERROR;
} else {
result = PASS;
}
return result;
(注意:虽然你说你用C语言编写,但你的代码片段看起来更像伪代码,所以我在这里解决它的问题。你需要编写适当的代码来附加错误代码列表。)
答案 1 :(得分:1)
如果你需要知道的是你的迭代是否失败,你可以使用++
运算符:
int result = 0;
for i 1 to 10
if(operation() != PASS)
PRINT "FAILURE"
result++;
done
return (result == 0 ? PASS : ERROR);