作者sa12e3 ()
看板C_and_CPP
標題[問題] c++請問是否有else if 判斷條件簡化方式
時間Sun Aug 26 21:43:00 2018
開發平台(Platform): (Ex: Win10, Linux, ...) Android app模擬c++
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
各位 前輩:您們好。
因為是c++新手,還請幫忙指導以下的問題,
因為還不太熟悉,懇請幫忙提供簡單明瞭的簡單方式解惑,先謝謝 各位了。
感恩。
else if(c*2-1 == a && c+1 <= b )
{ cout << "*"; }
else if(c*2-1 == b && c+1 <= a )
{ cout << "*";}
else if(c*2-2 == a && c+2 <= b )
{ cout << "*";}
else if(c*2-2 == b && c+2 <= a )
{ cout << "*";}
這一串程式碼是在兩個for回圈內。
/*需要將以上程式碼取代成以下程式碼。*/
e若是int設定為 數字1或c-2等。
然後在上述的兩個for其中一個放入
e++或e--最多只能顯示一個e值,不能多個e值放入else if內重複判斷結果並顯示結果。
else if(c*2-e == a && c+e <= b )
{ cout << e<<"*"; }
else if(c*2-e == b && c+e <= a )
{ cout << e<<"*";}
請問 該如何修改比較好?
如不符發文規定還請幫忙通知,會嘗試調整文章內容的,謝謝您(們)。
…(@)
餵入的資料(Input):
不適用此欄位,程式已寫出,需要簡化,因為不簡化 可顯示圖像只能限定在特定的輸入
資料顯示,除非自行再次加入else if條件才可。…(*)
預期的正確結果(Expected Output):
同上(*)內容。
錯誤結果(Wrong Output):
同上(*)內容。
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
同上(@)內容。
補充說明(Supplement):
為了減少文章篇幅,所以盡可能縮減程式碼內容,擷取需要詢問的地方,以及使用(*)
及(@)標記符號敘述文章內容。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.165.210.129
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1535290983.A.E03.html
1F:→ commandoEX: 你可以讓e設成陣列變成e[i]就能在迴圈中有很多個e啦 08/26 22:17
2F:推 stupid0319: 完全看不懂原PO想要表達的內容,看來我還是太淺了 08/26 22:32
3F:→ MOONRAKER: 看不懂+1 非常深奧 08/26 22:42
4F:推 jerryh001: 我覺得你最好列出完整code或是完整問題 08/27 00:55
5F:推 CoNsTaR: Linear types?確保變數只能被使用一遍? 08/27 04:17
6F:推 s4300026: if(e==1戌e==c-2){則使用修改後的方法} 08/27 08:32
7F:推 s4300026: 聽起來就是原po有兩種輸入情境(e=1和e=c-2),但他目前 08/27 08:39
8F:→ s4300026: 只寫了一種判斷方法(e=1),然後他想要一種判斷方法可以 08/27 08:39
9F:→ s4300026: 一次判斷兩種情境(即他所述的新方法),但他不知道要 08/27 08:39
10F:→ s4300026: 怎麼過濾掉除了上述兩種情境的方法進入判斷式 08/27 08:39
11F:推 s4300026: 以上為水晶球腦補的結果 08/27 08:41
12F:→ sarafciel: I think you can describe your problem in English. 08/27 08:53
13F:→ sa12e3: 謝謝各位,但發現若要使用陣列 c*2及a,b等數值貌似要一同 08/27 10:51
14F:→ sa12e3: 轉換成陣列才可運行? s4300026大大的解說是正確的,就是 08/27 10:51
15F:→ sa12e3: 希望能有此效果,謝謝 您的細部說明。 08/27 10:51
16F:→ sa12e3: 但又好像是侷限於linear types ,很多不確定的地方,還請 08/27 11:00
17F:→ sa12e3: 幫忙指點迷津,感謝。 08/27 11:00
18F:→ sa12e3: e =1 or e = c-2,兩者皆可以,只是轉換的方式在回圈內一 08/27 11:04
19F:→ sa12e3: 個是遞增,另一個是遞減,不管那一個,只要能將多個e值放 08/27 11:04
20F:→ sa12e3: 入同一個else if做多次判斷及做出多個判斷後結果顯示即可 08/27 11:04
21F:→ sa12e3: 。 08/27 11:04
22F:→ sa12e3: 看來是不用將a,b,c一同轉換成陣列,這邊我誤會了,應該可 08/27 11:06
23F:→ sa12e3: 行,我再試試看,謝謝各位。 08/27 11:06
24F:→ sa12e3: 陣列使用了還是只會有一種結果顯示(僅有一個e值進入else 08/27 11:29
25F:→ sa12e3: if判斷) 這個問題真的是linear types嗎? 08/27 11:29
26F:推 Killercat: 你這問題其實就是COR(Chain of Responbility)最常解決 08/27 20:46
27F:→ Killercat: 的問題,不過由於你的statement過短,寫成COR就太搞剛 08/27 20:46
28F:→ sa12e3: 不好意思,是否可請 前輩提供cor簡單的範例? 謝謝 您。 08/28 09:43
29F:→ sa12e3: 另外補充,這邊簡化前的程式碼中將被e值取代的值,不只是 08/28 09:43
30F:→ sa12e3: 1,2可無限延伸(3,4,5…)延伸到哪裡依照使用者輸入的數 08/28 09:43
31F:→ sa12e3: 值進行規範,足以顯示畫圖的範圍即可。這部分相信自己有 08/28 09:43
32F:→ sa12e3: 方式可處理此限制範圍的。 但是目前仍卡在將此else if進 08/28 09:43
33F:→ sa12e3: 行多次判斷的問題。 08/28 09:43
34F:推 s4300026: 話說可以給一下雙迴圈的變數嗎? 他們跟e有關係嗎? 08/28 12:03
35F:→ sa12e3: c是使用者輸入條件一個int數字(同時是界定範圍的一個值) 08/28 12:33
36F:→ sa12e3: ,其他的a,b是兩個for使用的變數。 08/28 12:33
37F:→ sa12e3: 兩個for中的a,b與e可由c來界定範圍,e可設定為與a或b或c 08/28 12:44
38F:→ sa12e3: 相關,也可讓e自己設定為與a或b或c無關,但最後不管是哪 08/28 12:44
39F:→ sa12e3: 個還是要有c來規範e避免造成不需要的影響。 不好意思,好 08/28 12:44
40F:→ sa12e3: 像說明的不太明白,就跟一般用*畫圖的題目是相同的,還請 08/28 12:44
41F:→ sa12e3: 前輩幫忙給個引導cor的方式,感謝。 不是很了解cor,查了 08/28 12:44
42F:→ sa12e3: cor感覺複雜,抓不到用在這裡的重點方法。 08/28 12:44
44F:→ sa12e3: 先貼目前的程式碼,之後再附加其他部分。 08/28 13:34
46F:→ sarafciel: 內層的迴圈要記得縮排 還有給變數有意義的名稱 08/28 15:06
47F:→ sa12e3: 好厲害,謝謝 您,研究一下,知道要給變數有意義的名稱及 08/28 15:18
48F:→ sa12e3: 縮排很重要,但目前急於學習方法,所以較注重於可先寫出 08/28 15:18
49F:→ sa12e3: 來內容,之後再更改習慣。 感謝 前輩提供另類寫法及提醒 08/28 15:18
50F:→ sa12e3: 編寫習慣的重要性。 08/28 15:18
52F:→ sa12e3: 感謝 您的提供,原來還有這樣的寫法。 08/29 08:27
53F:→ sa12e3: 真的沒有想到, 前輩們果然厲害:) 08/29 08:28
54F:→ Killercat: COR精神就是連續一大串傳回bool的function, 一個接一個 08/29 21:33
55F:→ Killercat: 第一個function會檢查自己能否處理 能就丟true 不能就 08/29 21:33
56F:→ Killercat: false 給下一個處理。你這例子是邏輯過於簡單 COR不合 08/29 21:33
57F:→ Killercat: 算,只是順便提一下一般大量if-else是用COR處理較常見 08/29 21:34
58F:→ sa12e3: 謝謝 前輩們的指導,受益良多。 08/31 08:59