2016-06-24 4 views
1

Nun ist es ein einfaches Programm, das ich eine Reihe von Zeichen bekam, wie:Printing Elemente eines Arrays in C

char alphabet[5] = {'A', 'B2', 'C', 'D4', 'E'};

und ich möchte Elemente dieses Arrays drucken, innerhalb eines für -loop:

int remainder = my_number % 5; printf("%c\n", alphabet[remainder]);

das ist es, wo ich es nicht als den Ausdruck erwartet ausgeführt machen kommt A, 2, C, 012.oder E. Wie kann ich es drucken B2 und D4?

Ich habe gehört, Enums zu verwenden, aber ich verstehe nicht, wie ich verwenden könnte, ich werde verwirrt über die Idee von Elementen haben Wert und wie ich die Elemente aus ihnen Wert, zB: enum letters {'a', 'b', 'c'}; a = 0 , b = 1 und c = 2.

(vielleicht auch nur meine Syntax ist es nicht korrekt, aber bitte, wenn Sie mir helfen ...)

ich werde meinen Code für eine einfachere Erklärung öffnen.

#include <stdio.h> 
#include <stdlib.h> 

const char *notes[13] = {"C", "C2", "D", "D2", "E", "F", "F2", "G", "G2", "A", "A2", "B", "c"}; // The 2's is for the "#" 

int main(int argc, char const *argv[]) // Just using argv[1] to say how much numbers I want to print 
{ 
    int now, before_1 = 1, before_2 = 1, rem, steps; // "rem" stands for remainder 
    char note; 

    if (atoi(argv[1]) <= 2) 
    for (steps = 0; steps < atoi(argv[1]); steps++) 
     printf("1\n"); 
    else 
    for (steps = 0; steps < atoi(argv[1]); steps++) // Main loop for Fibonacci's Numbers 
    { 
     now = before_1 + before_2; 
     rem = now % 13; 
     note = notes[rem]; 
     printf("Note : %c <=> Rem : %d. Num : %d\n", note, rem, now); 

     before_2 = before_1; // Change values of variables 
     before_1 = now; 
    } 

    return 0; 
} 

Die Idee ist, die Zahl der Fibonacci-Serie bekommen und sie in allen 13 Anmerkungen möglich Transformation (umfassen die scharfen sind), aber wie ich gesagt habe, die Ausgabe wird zur Kenntnis zu gut.

+1

'B2' und' D4' sind keine Zeichen. – tkausl

+0

Sind sie Saiten? –

+1

@ tkausl: Sie sind gültige Zeichenkonstanten. Nur wahrscheinlich nicht als Initialisierer für ein 'char' Objekt korrigiert. – Olaf

Antwort

-1

Einfache Anführungszeichen werden verwendet, um ein Zeichen anzugeben. So würde 'B2' ein char behandelt werden. Stattdessen möchten Sie char*, und damit doppelte Anführungszeichen.

+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/115475/discussion-on-answer-by-odin19-printing-elements-of-an-array-in-c). –

-1

Wie odin19 darauf hingewiesen hat, sind B2 und D4 keine Zeichen in C. Um sie zu drucken, können Sie Anführungszeichen in den Elementen des Arrays verwenden und sie als Zeichenfolgen mit% s in Ihrem Printf ausgeben.

3

In der ursprünglichen Version dieser Frage ist das Problem zweifach.

Zuerst ist Alphabet definiert als ein Array von Zeichen, d.h. char alphabet[]. Gemäß der anfänglichen Frage sollte es eher als ein Array von Strings deklariert werden, d. H. char *alphabet[].

Zweitens, die in irgendeiner Weise aus der ersten Ausgabe folgt, sind die Initialisierungswerte Zeichen, während sie als Zeichenfolgen definiert werden sollten. Die Definition von F2 als ein Zeichen, daher 'F2', wird keine wörtliche Zeichenfolge darstellen "F2".

char *alphabet[] = {"A", "B2", "C", "D4", "E"}; 

Schließlich, um Strings, anstatt Zeichen zu drucken, die printf Formatkennung hat von % c auf % s geändert werden.

zusammenfassend, können Sie die Elemente eines String-Array wie folgt drucken:

char *alphabet[5] = {"A", "B2", "C", "D4", "E"}; 
for(int i = 0; i < 5; i++){ 
    printf("%s} ", alphabet[i]); 
} 

Wenn Sie die Größe des Arrays von Anfang an nicht kennen, können Sie auch schreiben:

char *alphabet[] = {"A", "B2", "C", "D4", "E"}; 
for(int i = 0; i < sizeof(alphabet)/sizeof(alphabet[0]); i++){ 
    printf("%s ", alphabet[i]); 
} 

Hoffe es hilft!

+0

Sie sollten herausfinden, was OPs Fehler ist. Offenbar ändert OP jedoch das Spiel komplett. – Olaf

+0

Danke, @Olaf! Glaubst du, dass es jetzt klarer ist? –

+0

Nun, Sie haben eine ganze Erklärung hinzugefügt, das ist gut. Einige Ergänzungen/Korrekturen: _ Zeichenkonstanten (z.B. ''a'') sind vom Typ' int ', nicht' char '. C hat keinen Zeichentyp im Sinne anderer Sprachen. 'char' ist an erster Stelle eine ganze Zahl. Beachten Sie auch, dass OP die Frage geändert hat, vielleicht möchten Sie hinzufügen, was mit dem _actual__-Code falsch ist (die späte Änderung ist ein sehr schlechter Stil). Deshalb sollten Sie auch nach einem [mcve] fragen, solche Schnipsel haben oft keinen relevanten Kontext und/oder sind nicht der Code, der zusammengestellt wird. – Olaf

1

char wird für einzelne Zeichen verwendet. Wenn Sie mehrere Zeichen benötigen, müssen Sie Zeichenfolgen verwenden.

char *strings[] = { "A", "B2", "C", "D4", "E"}; 

int remainder = my_number % 5; 
printf("%s\n", strings[remainder]);