C C 中怎樣優雅的寫多判斷 if 語句?

時間 2021-05-29 23:02:59

1樓:西北偏北

正好有乙個複雜的條件判斷借題主的帖子,希望各路大神能夠幫一下忙看一下。對這種條件判斷早就頭大了,一直處理不好

1. 假設有乙個購買數量 qty,乙個當前時間 current_date ,乙個購買資訊 message

2. 設限購數量為 buy_max (常量), 限購開始日期為 buymax_start_date,結束日期為 buymax_end_date

如果 qty <=buy_max 則 message 為空

3. 如果qty > buy_max 提示不能超出限購。但是這個是有條件的判斷當前日期 current_date 是否在限購期限內(buymax_start_date,結束日期為, buymax_end_date),限購期限的開始日期(buymax_start_date)和結束日期(buymax_end_date)可能存在,可能不存在,也可能都不存在,也可能都存在,也可能乙個存在。

當前日期在期限內message加入限購提示,如果不在日期內,則不加入訊息。

如果都不存在的條件下,僅僅在 qty > buy_max 下作業即加入訊息提示(message = 』超出限購數量』)

message = getMessage(qty, buy_max, (!!buymax_start_date) && buymax_start_date, (!!buymax_end_date) && buymax_end_date);

function getMessage(qty, buy_max, buymax_start_date, buymax_end_date) {

buymax_start_date,buymax_end_date 時間的秒級別

current_date ,當前時間的毫秒級別

var message = '';

var base_cond = (qty > buy_max);

if(base_cond) {

if(!!buymax_start_date) {

if(!!buymax_end_date) {

if((buymax_start_date * 1000) <= current_date && current_date <= (buymax_end_date * 1000)) {

message = "此商品限購,限購期間採購總數量不能超過"+buy_max+"雙!";

else {

message = '';

else {

if((buymax_start_date * 1000) <= current_date) {

message = "此商品限購,採購總數量不能超過"+buy_max+"雙!";

else {

message = '';

else {

if(!!buymax_end_date) {

if(current_date <= (buymax_end_date * 1000)) {

message = "此商品限購,限購期間採購總數量不能超過"+buy_max+"雙!";

else {

message = "";

else {

message = "此商品限購,採購總數量不能超過"+buy_max+"雙!";

return message;

2樓:

doif(

case2)if

(case3

)case4

}while(0

);dowhile(0);

可以讓結構變得非常清晰

3樓:王清宇

對可以用表驅動法的case使用表驅動法. 而不要寫成if(1==x)

...elseif(

2==x)....

如果使用分支, 如果每個分支最終都是同乙個結果, 可以考慮exp=

condition1

?evaluation1

:condition2

?evaluation1

:evaluation3

;對if裡的每乙個複雜條件表示式做如下疑問, 條件表示式的形式是what 還是how?,

4樓:楚軒

能打表的用Map,不能打表的分析跳轉結構,看看有沒有能合併的分支.不在意效能的話..也可以試試虛函式的執行期分派來處理分支.如果都不行....邏輯就是這麼複雜.

5樓:Milo Yip

這類問題可參考《重構 (豆瓣)》

例如:Replace Nested Conditional with Guard Clauses

Replace Conditional with Polymorphism

Decompose ConditionalConsolidate Conditional Expression一些情況也可以用上《Design Patterns (豆瓣)》中的模式,把一些過程式問題用OO的多型來解決。

C C 中 符號的運算順序是怎樣的?

我也來補充個簡化版吧 這個不是優先順序的問題也不是運算順序的問題,更不是加個括號能解決的問題,更跟什麼進棧出棧壓棧順序半毛錢關係都沒有,這是序列點的問題 假設有兩個返回bool的函式 bool A bool B 又有乙個C函式 void C bool x bool y 那麼呼叫 C A B 時,請問...

阿拉伯語中器官的陰陽性怎麼判斷

江城孤舟 在阿拉伯語中,除了極少數例外,如臉頰和眉毛外,人體與動物體其他成雙數的器官都是陰性,如眼睛 手 腳 肩膀 小腿等。所有指物名詞的複數是陰性,這一點也是學阿語的人都知道的基本常識,所以牙齒的複數是陰性。但切不可倒過來想,誤認為 單數又沒有陰性標記的人體器官名詞,就都是陽性。如果有閒暇時間的話...

怎樣判斷這種行為中雙方的善惡與否?

首先我們需要明確,善與惡的認定,是一種價值判斷,在不同時空 不同情境下,同乙個事件很有可能會得到截然不同的結果。基於這個之上,我們來看下問題 小明舉報賣假貨,導致了假貨商家斷了財路,這對不對?小明舉報廣場上打網球的老人,導致老人們無法在廣場上打網球,這對不對?從這兩個問題的問法上來看,相對於動機與結...