for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //這里使用continue的話不能控制那個回圈
}
。。。。。。。。。。
NextTriangle: //這里說我語法錯誤,郁悶
}
為什么有這樣傻的設計呢?
uj5u.com熱心網友回復:
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //這里使用continue的話不能控制那個回圈
}
。。。。。。。。。。
NextTriangle:; //我發現了這里要加多一個頓號。無語,否則會編譯出錯
}
uj5u.com熱心網友回復:
沒有 ;(空陳述句) 就不是 一條 陳述句 !uj5u.com熱心網友回復:
別抱著goto不放了,你需要的僅僅是一個break;陳述句uj5u.com熱心網友回復:
你沒有明白我的意思吧,我是要跳到下一次回圈,而且break也就是跳出最近一層的回圈,像我這種2個嵌套的回圈,break一樣控制不了最外層的回圈
uj5u.com熱心網友回復:
加控制變數啊。goto陳述句很顯然是設計不良的體現
uj5u.com熱心網友回復:
你可以說不爽,但不能隨便說是缺陷。uj5u.com熱心網友回復:
goto NextTriangle 改:///////////////////////////////////////
{
flag= TRUE;// 加 BOOL flag=FALSE;
break;
}// 2nd for
if (flag)
{
flag=FALSE;
continue;// 1st for
}
..............................................
uj5u.com熱心網友回復:
別抱著goto不放了,你需要的僅僅是一個break;陳述句
你沒有明白我的意思吧,我是要跳到下一次回圈,而且break也就是跳出最近一層的回圈,像我這種2個嵌套的回圈,break一樣控制不了最外層的回圈
加控制變數啊。goto陳述句很顯然是設計不良的體現
我不明白為什么要這樣做呢?這樣做是不是令代碼更加臃腫呢?
uj5u.com熱心網友回復:
goto NextTriangle 改:
///////////////////////////////////////
{
flag= TRUE;// 加 BOOL flag=FALSE;
break;
}// 2nd for
if (flag)
{
flag=FALSE;
continue;// 1st for
}
..............................................
你可以說不爽,但不能隨便說是缺陷。
我是不明白為什么有這樣的設計
uj5u.com熱心網友回復:
因為有時候各種 error 需要 goto 到一個 共同的 錯誤 處理函式 中去uj5u.com熱心網友回復:
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++){
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //按照你goto邏輯,你需要的是break而不是continue
}
。。。。。。。。。。
NextTriangle: //其后你需要至少一個陳述句,加個分號做空陳述句,有何不可?
}
uj5u.com熱心網友回復:
樓主說沒有goto的代碼臃腫。python沒有goto有人并沒有顯示出代碼臃腫,不客氣地說程式設計方面你尚需入門。goto陳述句的壞處早在50年前就幾乎已經定案,Edsger Wybe Dijkstra在1968年寫下了著名的《GOTO陳述有害論》。
建議去搜索一下“意大利面條代碼”。
uj5u.com熱心網友回復:
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //按照你goto邏輯,你需要的是break而不是continue
}
。。。。。。。。。。
NextTriangle: //其后你需要至少一個陳述句,加個分號做空陳述句,有何不可?
}
break也是當前的回圈,“NextTriangle:”上面還有很多代碼。我是需要進入下一次回圈,不再需要執行下面的代碼
uj5u.com熱心網友回復:
樓主說沒有goto的代碼臃腫。
python沒有goto有人并沒有顯示出代碼臃腫,不客氣地說程式設計方面你尚需入門。goto陳述句的壞處早在50年前就幾乎已經定案,Edsger Wybe Dijkstra在1968年寫下了著名的《GOTO陳述有害論》。
建議去搜索一下“意大利面條代碼”。
我也迫不得已才使用goto啊,如果continue能控制指定回圈的話
uj5u.com熱心網友回復:
樓主說沒有goto的代碼臃腫。
python沒有goto有人并沒有顯示出代碼臃腫,不客氣地說程式設計方面你尚需入門。goto陳述句的壞處早在50年前就幾乎已經定案,Edsger Wybe Dijkstra在1968年寫下了著名的《GOTO陳述有害論》。
建議去搜索一下“意大利面條代碼”。
我也迫不得已才使用goto啊,如果continue能控制指定回圈的話
設定個標記變數,
內層回圈設定這個標記,然后break;
外層回圈判斷這個標記,如果被設定則break;
完全不需要goto陳述句。
所有用goto陳述句的行為都是為了表現一下自己夠酷,會用goto陳述句。別去相信為了吸引眼球的網上帖子或者書上的任何關于必須使用goto陳述句的說法!
uj5u.com熱心網友回復:
continue、break都是針對1層回圈的。可以用throw
try{
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
throw( pTransMesh->dwFaceCount * 3 + dwItem);
}
}
}
catch(int b)
{
cout<< "Break at pTransMesh->dwFaceCount = “<< b/3 <<", dwItem ="<< b%3 << endl;
}
uj5u.com熱心網友回復:
continue、break都是針對1層回圈的。
可以用throw
try{
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
throw( pTransMesh->dwFaceCount * 3 + dwItem);
}
}
}
catch(int b)
{
cout<< "Break at pTransMesh->dwFaceCount = “<< b/3 <<", dwItem ="<< b%3 << endl;
}
不錯的設計。
uj5u.com熱心網友回復:
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++){
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //
..........................
}
。。。。。。。。。。
NextTriangle: //其后你需要至少一個陳述句,加個分號做空陳述句,有何不可?
}
這樣的邏輯結構,單使用break或continue都是不行的,需要加入邏輯判斷才能使用break或continue,只有使用goto最簡潔
uj5u.com熱心網友回復:
for (DWORD i = 0; i < pTransMesh->dwFaceCount; i++)
{
for (DWORD dwItem = 0; dwItem < 3; dwItem++)
{
if (MinPointCoord.v[dwItem] >= pNoTransMesh->TriangleDivision.vuNumDivisionUnit[dwItem])
goto NextTriangle; //
..........................
}
。。。。。。。。。。
NextTriangle: //其后你需要至少一個陳述句,加個分號做空陳述句,有何不可?
}
這樣的邏輯結構,單使用break或continue都是不行的,需要加入邏輯判斷才能使用break或continue,只有使用goto最簡潔
爭論簡不簡潔對理解代碼毫無益處。goto慎用。一個不小心,也許完全沒有按照你的想法在跑。
uj5u.com熱心網友回復:
多層回圈, 用goto, 跟使用標記變數沒多在區別.雖然goto看起來少寫了一些if判斷, 但稍復雜點的邏輯里面, 一不注意就有各種記憶體的坑.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51468.html
標籤:基礎類
上一篇:想基于邊緣的輪廓對區域進行提取
下一篇:ADO讀取access表的屬性
