[問題] c++請問是否有else if 判斷條件簡化方式

看板C_and_CPP作者時間7年前 (2018/08/26 21:43), 編輯推噓9(9049)
留言58則, 10人參與, 7年前最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1535290983.A.E03.html

08/26 22:17, 7年前 , 1F
你可以讓e設成陣列變成e[i]就能在迴圈中有很多個e啦
08/26 22:17, 1F

08/26 22:32, 7年前 , 2F
完全看不懂原PO想要表達的內容,看來我還是太淺了
08/26 22:32, 2F

08/26 22:42, 7年前 , 3F
看不懂+1 非常深奧
08/26 22:42, 3F

08/27 00:55, 7年前 , 4F
我覺得你最好列出完整code或是完整問題
08/27 00:55, 4F

08/27 04:17, 7年前 , 5F
Linear types?確保變數只能被使用一遍?
08/27 04:17, 5F

08/27 08:32, 7年前 , 6F
if(e==1戌e==c-2){則使用修改後的方法}
08/27 08:32, 6F

08/27 08:39, 7年前 , 7F
聽起來就是原po有兩種輸入情境(e=1和e=c-2),但他目前
08/27 08:39, 7F

08/27 08:39, 7年前 , 8F
只寫了一種判斷方法(e=1),然後他想要一種判斷方法可以
08/27 08:39, 8F

08/27 08:39, 7年前 , 9F
一次判斷兩種情境(即他所述的新方法),但他不知道要
08/27 08:39, 9F

08/27 08:39, 7年前 , 10F
怎麼過濾掉除了上述兩種情境的方法進入判斷式
08/27 08:39, 10F

08/27 08:41, 7年前 , 11F
以上為水晶球腦補的結果
08/27 08:41, 11F

08/27 08:53, 7年前 , 12F
I think you can describe your problem in English.
08/27 08:53, 12F

08/27 10:51, 7年前 , 13F
謝謝各位,但發現若要使用陣列 c*2及a,b等數值貌似要一同
08/27 10:51, 13F

08/27 10:51, 7年前 , 14F
轉換成陣列才可運行? s4300026大大的解說是正確的,就是
08/27 10:51, 14F

08/27 10:51, 7年前 , 15F
希望能有此效果,謝謝 您的細部說明。
08/27 10:51, 15F

08/27 11:00, 7年前 , 16F
但又好像是侷限於linear types ,很多不確定的地方,還請
08/27 11:00, 16F

08/27 11:00, 7年前 , 17F
幫忙指點迷津,感謝。
08/27 11:00, 17F

08/27 11:04, 7年前 , 18F
e =1 or e = c-2,兩者皆可以,只是轉換的方式在回圈內一
08/27 11:04, 18F

08/27 11:04, 7年前 , 19F
個是遞增,另一個是遞減,不管那一個,只要能將多個e值放
08/27 11:04, 19F

08/27 11:04, 7年前 , 20F
入同一個else if做多次判斷及做出多個判斷後結果顯示即可
08/27 11:04, 20F

08/27 11:04, 7年前 , 21F
08/27 11:04, 21F

08/27 11:06, 7年前 , 22F
看來是不用將a,b,c一同轉換成陣列,這邊我誤會了,應該可
08/27 11:06, 22F

08/27 11:06, 7年前 , 23F
行,我再試試看,謝謝各位。
08/27 11:06, 23F

08/27 11:29, 7年前 , 24F
陣列使用了還是只會有一種結果顯示(僅有一個e值進入else
08/27 11:29, 24F

08/27 11:29, 7年前 , 25F
if判斷) 這個問題真的是linear types嗎?
08/27 11:29, 25F

08/27 20:46, 7年前 , 26F
你這問題其實就是COR(Chain of Responbility)最常解決
08/27 20:46, 26F

08/27 20:46, 7年前 , 27F
的問題,不過由於你的statement過短,寫成COR就太搞剛
08/27 20:46, 27F

08/28 09:43, 7年前 , 28F
不好意思,是否可請 前輩提供cor簡單的範例? 謝謝 您。
08/28 09:43, 28F

08/28 09:43, 7年前 , 29F
另外補充,這邊簡化前的程式碼中將被e值取代的值,不只是
08/28 09:43, 29F

08/28 09:43, 7年前 , 30F
1,2可無限延伸(3,4,5…)延伸到哪裡依照使用者輸入的數
08/28 09:43, 30F

08/28 09:43, 7年前 , 31F
值進行規範,足以顯示畫圖的範圍即可。這部分相信自己有
08/28 09:43, 31F

08/28 09:43, 7年前 , 32F
方式可處理此限制範圍的。 但是目前仍卡在將此else if進
08/28 09:43, 32F

08/28 09:43, 7年前 , 33F
行多次判斷的問題。
08/28 09:43, 33F

08/28 12:03, 7年前 , 34F
話說可以給一下雙迴圈的變數嗎? 他們跟e有關係嗎?
08/28 12:03, 34F

08/28 12:33, 7年前 , 35F
c是使用者輸入條件一個int數字(同時是界定範圍的一個值)
08/28 12:33, 35F

08/28 12:33, 7年前 , 36F
,其他的a,b是兩個for使用的變數。
08/28 12:33, 36F

08/28 12:44, 7年前 , 37F
兩個for中的a,b與e可由c來界定範圍,e可設定為與a或b或c
08/28 12:44, 37F

08/28 12:44, 7年前 , 38F
相關,也可讓e自己設定為與a或b或c無關,但最後不管是哪
08/28 12:44, 38F

08/28 12:44, 7年前 , 39F
個還是要有c來規範e避免造成不需要的影響。 不好意思,好
08/28 12:44, 39F

08/28 12:44, 7年前 , 40F
像說明的不太明白,就跟一般用*畫圖的題目是相同的,還請
08/28 12:44, 40F

08/28 12:44, 7年前 , 41F
前輩幫忙給個引導cor的方式,感謝。 不是很了解cor,查了
08/28 12:44, 41F

08/28 12:44, 7年前 , 42F
cor感覺複雜,抓不到用在這裡的重點方法。
08/28 12:44, 42F

08/28 13:23, 7年前 , 43F

08/28 13:34, 7年前 , 44F
先貼目前的程式碼,之後再附加其他部分。
08/28 13:34, 44F

08/28 15:02, 7年前 , 45F
https://ideone.com/jW7G2M 你把問題拆難了
08/28 15:02, 45F

08/28 15:06, 7年前 , 46F
內層的迴圈要記得縮排 還有給變數有意義的名稱
08/28 15:06, 46F

08/28 15:18, 7年前 , 47F
好厲害,謝謝 您,研究一下,知道要給變數有意義的名稱及
08/28 15:18, 47F

08/28 15:18, 7年前 , 48F
縮排很重要,但目前急於學習方法,所以較注重於可先寫出
08/28 15:18, 48F

08/28 15:18, 7年前 , 49F
來內容,之後再更改習慣。 感謝 前輩提供另類寫法及提醒
08/28 15:18, 49F

08/28 15:18, 7年前 , 50F
編寫習慣的重要性。
08/28 15:18, 50F

08/28 21:58, 7年前 , 51F
若可用 ?: 及 abs() 就更方便 ==> https://ideone.com/lcRBcG
08/28 21:58, 51F

08/29 08:27, 7年前 , 52F
感謝 您的提供,原來還有這樣的寫法。
08/29 08:27, 52F

08/29 08:28, 7年前 , 53F
真的沒有想到, 前輩們果然厲害:)
08/29 08:28, 53F

08/29 21:33, 7年前 , 54F
COR精神就是連續一大串傳回bool的function, 一個接一個
08/29 21:33, 54F

08/29 21:33, 7年前 , 55F
第一個function會檢查自己能否處理 能就丟true 不能就
08/29 21:33, 55F

08/29 21:33, 7年前 , 56F
false 給下一個處理。你這例子是邏輯過於簡單 COR不合
08/29 21:33, 56F

08/29 21:34, 7年前 , 57F
算,只是順便提一下一般大量if-else是用COR處理較常見
08/29 21:34, 57F

08/31 08:59, 7年前 , 58F
謝謝 前輩們的指導,受益良多。
08/31 08:59, 58F
文章代碼(AID): #1RWgvdu3 (C_and_CPP)