用C

2015-08-22 58 views
2

更換一個預先定義的整數,其對應的字符串這是一種很難做出一個標題爲這個線程,但無論如何,我確實有我的C代碼開頭幾個DEFINE如下:用C

#define LOAD 2 
#define UP 1 
#define STOP 0 
#define DOWN -1 

他們是state我的特定狀態圖中的名稱。現在,我需要用printf命令打印這些州名,但我不知道如何檢索州名的文本等價物。舉例來說,假設state最初聲明:

int state = STOP; 

我想有這樣的:

printf("Current State: %s, state); 

其結果:

現狀:STOP

我知道我可以用四個模仿這個但我想知道是否有一個更簡單的方法來實現這一點。

感謝

+1

您可以定義一個查找來存儲這些字符串,以便lookup [-1] =「DOWN」,lookup [0] =「STOP」,.. – amdixon

回答

4

如果你真的需要保留的狀態DOWN具有值-1,你必須特別注意用它來訪問時,數組元素。

考慮到你的狀態值在[-1 .. N-1]的範圍內,你可以給它們添加一個常數1以獲得可用於處理元素的索引[0..N]一個char *數組。

const char* const state_names[] = {"down","stop","up","load"}; 

只有當你有一個連續的數字序列時,這纔有效。如果您稍後添加狀態#define WHATEVER 1000,則此方法將失敗。當你改變你的狀態值時,你必須相應地重新排序你的字符串數組。

如果您想要保持與您的狀態相關的值的靈活性,我會建議使用查找表來查看狀態名稱和值。

#include <stdio.h> 

enum {LOAD, UP, STOP, DOWN}; 

const char* const state_names[] = 
{ 
    [LOAD] = "load", 
    [UP] = "up", 
    [STOP] = "stop", 
    [DOWN] = "down" 
}; 

const int state_values[] = 
{ 
    [LOAD] = 2, 
    [UP] = 1, 
    [STOP] = 0, 
    [DOWN] = -1 
}; 

int main() 
{ 
    int state = STOP; 

    printf("Current State Name: %s\n", state_names[state]); 
    printf("Current State Value: %i\n", state_values[state]); 

    return 0; 
} 

狀態的這種方式,命令或實際值並不重要了,你可以輕鬆地添加更多的狀態或對它們重新排序不會破壞代碼。

0

也許你可以使用一個字符串數組:

#define LOAD 2 
#define UP 1 
#define STOP 0 
#define DOWN -1 

int main() 
{ 
    const char *my_array[] = {"DOWN","STOP","UP","LOAD"}; 
    int state = STOP; 

    printf("Current State: %s, my_array[state+ 1]); 

    return 0; 
} 
+1

會添加lookup = my_array + 1; .. printf .. lookup [state] ..比每次想要打印狀態時記得添加1更少的錯誤 – amdixon