我有一個簡單的函數內循環。找出一個for是否沒有壞
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
break;
}
if (/*for is not broken*/)
{
}
}
我應該寫什麼來代替:「/ * for not not broken * /」?
我不想在循環外定義我。
我不想在循環外定義另一個變量。
我有一個簡單的函數內循環。找出一個for是否沒有壞
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
break;
}
if (/*for is not broken*/)
{
}
}
我應該寫什麼來代替:「/ * for not not broken * /」?
我不想在循環外定義我。
我不想在循環外定義另一個變量。
最明顯的答案就是在循環中執行代碼,再突破,這在你的小例子只是看起來像:
當你想要做void Func(void)
{
for (int i = 0; i < 1; ++i)
{
{
/* other stuff */
break;
}
}
}
通常會出現此問題如果你的沒有中斷,這通常意味着在循環外定義循環變量。這有點麻煩,但是如果你把循環放在一個函數中,並且返回true/false(我更喜歡這裏的枚舉,因爲我個人不喜歡真/假返回值,除非從函數名中很清楚它們是什麼真的是意思)。
void LoopFuncReturnTrueOnBreak(void)
{
for(/* loop conditions */)
{
// stuff
if (/* condition */)
{
return true;
}
}
return false;
}
void Func(void)
{
if (LoopFuncReturnTrueOnBreak())
{
/* other stuff */
}
}
因爲代碼中的if語句的範圍中沒有可以測試的變量,所以不能沒有附加變量。
通常你使用一個變量:
bool didBreak = false;
for (int i = 0; i < 1; ++i)
{
didBreak = true;
break;
}
if (didBreak)
{
}
試圖避免你提到的晦澀的原因,這簡單的解決辦法只是讓你的生活困難。
我找到你的約束很奇怪:
這是什麼原因?爲此使用變量是正常的。代碼是關於可讀性的,而不是試圖實現最少的代碼行。
但是你可以不使用額外的變量就可以做的唯一事情就是在for循環中處理它。當你即將破裂時。
void Func(void)
{
for (int i = 0; i < 1; ++i)
{
if (some_condition)
{
HandleBreakScenario();
break;
}
}
}
原因:我在一個複雜的函數中反覆使用這個模式,我試圖阻止在函數中向我的範圍添加更多變量。 –
你的回答是對的,因爲其實我需要做的事情沒有壞(對不起,我的錯誤,我編輯它。)。 –
其實我需要做些事情,如果沒有中斷。你的答案(使用函數)正是我所需要的。 –
請接受答案,如果它給你你想要的東西,當然如果你真的需要在環沒有中斷時發生什麼事,你應該把它放在你的問題中。 –