0

我有以下数组:

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 

还有一个在 5x3 LED 矩阵上打印字母的功能:

void printLetter(int letter[])

我有一串字母:

char word[] = "STACKOVERFLOW";

我想将字符串的每个字符传递给 printLetter 函数。

我试过:

int n = sizeof(word);

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

但我收到以下错误:从 'char' 到 'int*' 的无效转换

我应该做什么?

谢谢!!

4

5 回答 5

5

参数类型错误的背后还有一个更深层次的问题:你缺少一个 char 和对应的int[].

重新定义printLetter

void printLetter(char letter)

满足编译器,但本身并不能解决您的问题。无论是内部还是外部printLetter,都需要获取对应int[]的给定char

实现此目的的简单暴力方法是使用 a switch,但更好的方法是使用第二个数组,即如下所示:

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

请注意,这是一个示例 - 我现在无法访问 C 编译器,因此我不能保证它可以立即工作,但希望它能够很好地说明这一点。它还缺乏边界检查,因此它会在奇怪的随机位置访问内存,如果您尝试打印“未知”字符,可能会导致崩溃。

该解决方案应该适用于大写字母;如果您还需要打印小写字母或其他字符,您可能更喜欢使用 256 个元素的数组,其中仅填充与“已知”矩阵对应的索引处的元素,其余元素设置为 NULL。

于 2010-05-22T21:02:26.133 回答
2

您不能轻易地将“a”从“stackoverflow”转换为 A - 整数数组。您可以在一个字母中定义代表一个字母的所有数组,并通过将您的字母转换为 int 来获取它们。

于 2010-05-22T21:00:19.133 回答
2

您需要做的是将字符转换为您的数组之一。所以当你有字母'A'时,你会想要使用 array 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,
    ...
};
于 2010-05-22T21:05:14.550 回答
1

该函数被声明为void printLetter(int letter[]),这意味着它需要一个指向整数数组的指针。另一方面,word是一个字符数组,并且word[i]是一个字符,它根本不是正确的类型。如果printLetter()真的只是应该打印单个字符,则应将其参数更改为 char。

于 2010-05-22T20:59:55.873 回答
0
void printLetter(int letter[]) 

应该 void printLetter(char letter)

因为:wordis a char[] word[i]is a character。

于 2010-05-22T21:00:09.743 回答