2010-05-22 88 views
0

INT *我有以下的數組:無效轉換從「字符」到「用C

int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1}; 
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0}; 
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1}; 
//etc... for all letters of the alphabet 

而且,打印在5×3的字母的函數LED矩陣:

void printLetter(int letter[]) 

我有一串字母:

char word[] = "STACKOVERFLOW"; 

我想將字符串的每個字符傳遞給printLetter函數。

我想:

int n = sizeof(word); 

for (int i = 0; i < n-1; i++) { 
    printLetter(word[i]); 
} 

但我得到以下錯誤:從「字符」無效轉換到「詮釋*」

我應該怎麼做?

謝謝!

回答

5

參數類型錯誤的後面有一個更深的問題:缺少char和相應的int[]之間的映射。

重新定義printLetter作爲

void printLetter(char letter) 

滿足編譯器,但並沒有解決你的問題本身。無論是在printLetter之內還是之外,對於給定的char,您需要獲取相應的int[]

一個簡單的暴力方式來實現,這將是使用switch,但更好的方法是使用第二個陣列,即是這樣的:

void printLetter(char letter) { 
    static int* charToMatrix[] = { A, B, C, ... }; 
    int* matrixToPrint = charToMatrix[letter - 'A']; 
    // print the matrix 
} 

注意,這是一個例子 - 我目前無法使用C編譯器,因此我無法保證它立即可用,但希望它能夠充分說明這一點。它也缺少邊界檢查,所以它會在奇怪的隨機位置訪問內存,如果嘗試打印「未知」字符,可能會導致崩潰。

該解決方案應該適用於大寫字母;如果您還需要輸出小寫字母或其他字符,則可能需要使用256個元素的數組,其中只有與「已知」矩陣對應的索引元素被填充,其餘元素被設置爲NULL。

1

該函數聲明爲void printLetter(int letter[]),這意味着它需要一個指向int數組的指針。另一方面,word是一個字符數組,word[i]是一個字符,它並不是正確的類型。如果printLetter()實際上只是打印單個字符,則應該將其參數更改爲字符。

+0

沒有評論的投票非常粗魯無用。如果你對我的回答有問題,請說出它的含義。據我所知,我的答案完全正確。 – Chuck 2010-05-22 21:18:39

+0

+1對於錯誤問題的正確答案 - 如果您查看留在我答案中的評論(與您的答案几乎相同),則OP爲-1,因爲未發佈的代碼失敗。難道你不知道,你應該閱讀頭腦。 – Alan 2010-05-22 21:21:43

0
void printLetter(int letter[]) 

應該是 void printLetter(char letter)

因爲:word是char [] word[i]是一個字符。

+0

但我要打印的原始數組是一個int數組,而不是一個char數組: int A [] = {0,1,1,1,1,1,0,1,0,0,0,1 ,1,1,1-}; 如果我按照你的意見,我得到這個錯誤: 從'char'無效轉換爲'char * – majdal 2010-05-22 21:10:14

+0

這是因爲你需要修復printLetter()這是你沒有發佈的代碼。根據你提供的信息,我的回答是正確的。 – Alan 2010-05-22 21:21:17

2

你不能如此簡單地將「a」從「stackoverflow」轉換爲A - 整數的數組。你可以在一個單一的字母中定義所有代表一個字母的數組,並通過將你的字母轉換爲int來獲得它們。

2

你需要做的是從一個字符轉換爲你的一個數組。所以當你有字母'A'時,你會想要使用數組A。最簡單的方法是通過查找表。

int *lookup[256]; // assuming ASCII 
memset(lookup, 0, sizeof(lookup)); 

lookup['A'] = A; 
lookup['B'] = B; 
... 

然後,當你有一個字符,可以得到適當的數組:

void printletter(char c); 
{ 
    int *data = lookup((unsigned char)c); 

    // In case you get a letter that you don't know how to display 
    if (data != NULL) 
    { 
     // display with data 
    } 
} 

而是在運行時建立的數組,你也可以在編譯時建立你的陣列雖然會有點難,因爲你需要手動輸入NULL指針。

int *lookup[256] = { 
    NULL, // you need a total of 65 NULL's 
    NULL, 
    ... 
    A,  // so this is at the correct position 
    B, 
    C, 
    ... 
}; 
相關問題