ungültige Konvertierung von 'char' to 'int* * in C
Ich habe folgende arrays:
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
Und eine Funktion, druckt die Buchstaben auf einem 5x3 LED-matrix:
void printLetter(int letter[])
Ich habe eine Reihe von Briefen:
char word[] = "STACKOVERFLOW";
willst und ich pass jedes Zeichen der Zeichenfolge printLetter Funktion.
Habe ich versucht:
int n = sizeof(word);
for (int i = 0; i < n-1; i++) {
printLetter(word[i]);
}
Aber ich bekomme die folgende Fehlermeldung: invalid conversion from 'char' to 'int*'
Was soll ich tun?
Dank!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinter der parameter-Typ-Fehler gibt es ein tiefer liegendes Problem: Ihnen fehlt die Zuordnung zwischen einem char und der entsprechenden
int[]
.Neudefinition
printLetter
alserfüllt der compiler, aber nicht lösen Ihr problem per se. Ob innen oder außen
printLetter
zu erhalten, müssen Sie die entsprechendenint[]
für einen bestimmtenchar
.Einem einfachen brute-force-Weg, dies zu erreichen wäre, um eine
switch
, aber ein besserer Weg ist, um einen zweiten array, D. H. so etwas wie dieses:Beachten Sie, dass dies ist ein Beispiel - ich habe keinen Zugriff auf einen C-compiler, gerade jetzt, so ich kann nicht garantieren, es funktioniert sofort, aber ich hoffe es zeigt den Punkt gut genug. Es fehlt auch bounds checking, also es greift auf den Speicher in seltsamen zufälligen stellen, womöglich einen Absturz, wenn Sie versuchen zu drucken, einem "unbekannten" Charakter.
Diese Lösung soll für die Großbuchstaben; wenn Sie drucken müssen, Kleinbuchstaben Buchstaben oder andere Zeichen, die Sie vielleicht lieber mit einem array mit 256 Elementen, wobei nur die Elemente in den Indizes entsprechend dem "bekannten" Matrizen gefüllt sind, und der rest ist auf NULL gesetzt.
Können Sie nicht so leicht verwandeln das 'a' aus "stackoverflow", um die Ein - array von int-Werten. Sie können festlegen, alle arrays, die Sie vertreten, einen Brief in einen einzigen Brief, und bekommen Sie durch die Umstellung Ihres Schreibens int.
Was Sie tun müssen, ist die Konvertierung von Zeichen zu einem Ihrer arrays. Also, wenn Sie den Buchstaben 'A', werden Sie wollen, verwenden Sie array
A
. Der einfachste Weg dies zu tun ist via Nachschlagetabelle.Dann, wenn Sie haben einen Charakter, Sie können Holen Sie sich die richtige array:
Statt Aufbau deines Arrays zur Laufzeit können Sie auch bauen Sie Ihre Arrays zur compile-Zeit, obwohl es wird ein bisschen schwieriger, da müssen Sie manuell in NULL-Zeiger.
Die Funktion ist deklariert als
void printLetter(int letter[])
, was bedeutet, dass es einen Zeiger auf ein array von ints. Auf der anderen Seiteword
ist ein array von Zeichen, und dieword[i]
ist ein char, das ist überhaupt nicht der richtige Typ. WennprintLetter()
wirklich ist, soll nur zum drucken ein einzelnes Zeichen, sollten Sie Ihr argument ein char.werden sollte
void printLetter(char letter)
Weil:
word
ist ein char[]word[i]
ist ein Zeichen.