2017-06-30 69 views
0

假設我已經關聯(在我的腦海裏,而不是代碼)一個狀態的東西,其大小爲n的整數數組。

int array[n] = {0,0,1,0,1,0,1,0,1,.......}。 (在此陣列中只有0和1)

狀態'0'表示在我的上下文中'鎖定'。同樣,'1'表示'解鎖'。 我希望每次打印變量,例如int array[3],我想輸出它的狀態作爲一個字符串,而不是變量的實際值。如何將變量值映射到指定的字符串?

我該怎麼做?有沒有一種方法可以將「0」替換爲「鎖定」,1替換爲「解鎖」?

P.S. - 我不想用數據類型字符串創建另一個數組,或者簡單地放一個if-else方程。非常感謝宏的幫助。

+1

'看跌期權((字符* [2]){ 「鎖定」, 「解鎖」} [!!陣列[3]]);'是使用一個開始_compound literal_。 – chux

+3

'puts(「unlocked」+ 2 *!array [3]);' –

+0

'#define show_lock(b)((b)?「unlocked」:「locked」)'然後輸出show_lock(array [n])用'printf()','fputs()',或者你喜歡的任何東西。 –

回答

0

這是一個沒有很好理解的任務嗎?

我覺得Mike Housky的評論是正確的。但是讓我添加一些「宏」,也許這個答案會被降低。

#define LOCKED 0 
#define UNLOCKED 1 
#define PRINT(x) (x == LOCKED) ? printf("locked") : printf("unlocked") 

用作

int array[n] = {0,0,1,0,1,0,1,0,1,.......} 
or 
int array[n] = {LOCKED,UNLOCKED,LOCKED,.......} 

PRINT(array[3]); 
+0

不是一項任務。一種項目的一部分。多tnx :) – sancz

1

當然,您可以使用字符串文字並根據數組插槽的值決定使用哪一個。

for (int i = 0; i < n; i++) { 
    const char *is_locked = (array[i] == 0) ? "locked" : "unlocked"; 
    printf("status of %d: %s\n", i, is_locked); 
} 
+0

將起作用。但在我的代碼中,我需要打印該變量(0或1)是不必要的條件。我不應該打印它的狀態。有沒有辦法可以用鎖定或解鎖來代替0或1。 (MACROS?) – sancz

+2

是的,你可以使用宏。但描述你約束的規則還不清楚。 「這是不必要的條件,我需要打印該變量(0或1)」 - 這是什麼意思?我不能改變調用者,它會調用「print_this_val(array [n])」?你仍然可以改變'print_this_val'的定義。那麼真正的約束是什麼? –

+0

他將如何定義宏,如果他將定義'#定義0「鎖定」,它不會取代零在條件檢查 –