2016-07-25 15 views
-3

Ich versuche, die unter zweidimensionalen String-Array in C zu drucken, wie unten:Drucken mehrdimensionalen Array von Zeichen

char text[10][80] = { 
    "0", "Zero", 
    "1", "One", 
    "2", "Two", 
    "3", "Three", 
    "4", "Four", 
}; 

Die Ausgabe wie folgt sein sollte:

0 Zero 
1 One 
2 Two 
3 Three 
4 Four 

Ich habe die unten geschrieben Programm:

#include <stdio.h> 

int main() 
{ 
    char text[10][80] = { 
     "0", "Zero", 
     "1", "One", 
     "2", "Two", 
     "3", "Three", 
     "4", "Four", 
    }; 
    int i, j; 
    for(i=0; i<6; i++) 
    { 
     for(j=0; j<1; j++) 
     { 
      printf("%s ", text[i]); 
     } 
    } 
    return 0; 
} 

Es liefert mir nicht die gewünschte Ausgabe. Ich habe verschiedene Wege ausprobiert, aber kein Glück.

+4

'für (j = 0; j <1; j ++)' was ist der Zweck? –

+0

Sie müssen Array-Element wie Text [i] [j] in printf-Anweisung drucken. – Murli

+0

Um den Spaltenraum zu erstellen. – Sayeed

Antwort

6

Sie können Ihre Schleife zu erhalten gewünschte Ausgabe ändern -

for(i=0; i<9; i=i+2){ 
    printf("%s %s\n", text[i], text[i+1]); 
} 

Diese Schleife i und i+1 in gewünschtem Format, den Inhalt des Arrays mit dem Index gedruckt wird. Wie Werte bei Index 0 und 1, 2 und 3 und so weiter.

+0

Das funktioniert genau wie ich will. Vielen Dank für den Vorschlag. – Sayeed

+0

@Sayeed Schön, dass es geholfen hat. – ameyCU

+0

Warum nicht die stereotypen "i <10" und "i + = 2"?Ich denke, einige erläuternde Worte könnten helfen: Die obige Formatierung des 2D-Arrays ** ist so irreführend **. – Wolf

0

Nun, können Sie eine einfache Logik, drucken alle text[i] s folgen und eine neue Zeile hinzufügen, wenn der Index ungerade Zahl (auch Iteration) ist, wie

for(i=0; i<10; i++) 
{ 
     printf("%s\t", text[i]); 

    if (i%2) puts(""); 
} 

Ansonsten eine andere andere Art, dies zu tun ist insert (append) ein Register oder ein newline in die Druck Anweisung selbst, basierend auf der Iteration (Index) -Nummer, wie

for(i=0; i<10; i++) 
{ 
    printf("%s%c", text[i], i%2?'\n':'\t'); 
} 
+0

Was für eine kreative Einrückung :) ... Ernst: es macht absolut Sinn. Vielleicht solltest du ein Wort über 'puts (" ")' – Wolf

+1

'printf ("% s% c ", Text [i], i% 2? '\ N': '\ t') sagen;' – pmg

+0

@pmg A eher schicker Weg, lass mich das in meiner Antwort selbst hinzufügen. :) –

0

Es ist nicht klar aus Ihrer Beschreibung, wenn Sie ein zweidimensionales Array von Zeichenfolgen oder ein zweidimensionales Array von Zeichen (daher ein eindimensionales Array von Zeichenfolgen) wollen. Wenn der erste, der wahr ist, dann versuchen:

int main() 
{ 
    char *text[10][80] = { 
     {"0", "Zero",}, 
     {"1", "One",}, 
     {"2", "Two",}, 
     {"3", "Three",}, 
     {"4", "Four",}, 
    }; 
    int i, j; 
    for(i=0; i<5; i++) 
    { 
     for(j=0; j<2; j++) 
     { 
      printf("%s ", text[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+2

The Array in der Frage ist richtig. Das ist nicht. –

+0

@RudyVelthuis: Was meinst du mit "Korrektheit" eines Arrays? – Marian

+0

Was Sie vorschlagen, ist etwas wie 'char * text [5] [2]' gute Idee, aber noch nicht geschrieben :) – Wolf

2

Ihre Daten sind organisiert als eine 10-Element-Array von char-Arrays mit jeweils Platz für 80 Zeichen (Null-Terminators char inklusive). Die geraden Elemente 0, 2, 4 usw. enthalten Zahlenliterale, die ungeraden Elemente 1, 3, 4 usw. enthalten die Namen dieser Zahlen. BTW: 80 Zeichen ist viel Platz für so kurze Strings reserviert.

Die Ausgabe sollte in zwei Spalten mit den geraden Elemente in der ersten und die ungeraden Elemente in der zweiten Spalte formatiert werden, sieht jede Reihe wie folgt aus:

numbername

Wie dies zu tun in einer Schleife, fand ich es interessant zu den Formatparameter für printf auswählen, die auf dem Index je i ungerade oder gar:

#include <stdio.h> 

char text[10][80] = { 
    "0", "Zero", 
    "1", "One", 
    "2", "Two", 
    "3", "Three", 
    "4", "Four", 
}; 

int main(void) { 
    int i; 
    for (i=0; i<10; i++) { 
     printf((i&1) ? "%s\n" : "%s\t", text[i]); 
    } 
    return 0; 
} 

Auch wenn es oft eine gute Idee ist, um das Problem zu schreiben und Format-Code so nah wie möglich, die durch gelöst sollte, ist es manchmal verschleiern kann, was wirklich vor sich geht. Dies ist, was der Compiler "sieht":

char text[10][80] = { 
    "0", 
    "Zero", 
    "1", 
    "One", 
    "2", 
    "Two", 
    "3", 
    "Three", 
    "4", 
    "Four", 
}; 

..., die eine bequeme Kurzform ist char-Arrays als Strings zu initialisieren, wird es intern in diesem

char text[10][80] = { 
    {'0'}, 
    {'Z', 'e', 'r', 'o'}, 
    {'1'}, 
    {'O', 'n', 'e'}, 
    {'2'}, 
    {'T', 'w', 'o'}, 
    {'3'}, 
    {'T', 'h', 'r', 'e', 'e'}, 
    {'4'}, 
    {'F', 'o', 'u', 'r'}, 
}; 

Der Abschluss `

erweitert \ 0 'Zeichen werden automatisch hinzugefügt, da jedes Array, das mit weniger Werten als Elementen initialisiert wird, mit dem Standardwert gefüllt wird.

Es spiegelt die gegebene Aufgabe am besten, wie ich finde. Wenn Sie sich für den "schnellsten" Code interessieren, scheint ameyCU's answer ein guter Ansatz zu sein.

Siehe diesen Code in einer live demo.

+0

Danke für die Notiz. Es löst das Problem. – Sayeed

+0

@Sayeed Ich hoffte, dass es mehr als das ist, der Code ist suboptimal, aber die Erklärung sollte helfen, die Aufgabe besser zu verstehen. :) – Wolf

Verwandte Themen