2017-12-09 7 views
0

Hallo ich bin neu bei der Programmierung und ich muss ein Array (muss 1 dimensionnal) wie ein Gitter drucken. Ich habe es jetzt stundenlang versucht und habe immer noch nicht die gewünschten Ergebnisse. Das Array hat 16 Werte so das Gitter etwas so sein würde:Wie kann ich ein Array wie ein Gitter drucken?

___________ 
|0 |1 |2 |3 | 
|4 |5 |6 |7 | 
|8 |9 |10|11| 
|12|13|14|15| 
––––––––––––– 

Mein Code:

#include <stdio.h> 

void display_grid(void) 
{ 
    int i; 
    int j; 
    int cell[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 

    for (i = 0; i < 4; i++) 
    { 
     printf("|"); 
     for (j = 0; j < 16; j++) 
     { 
     printf("%d|",cell[j]); 
     } 
     printf("\n"); 
    } 
} 

int main() 
{ 
    display_grid(); 
    return 0; 
} 

zeigt diese:

|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| 
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| 
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| 
|0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15| 
+0

@AditiRawat Ich entschuldige mich, dass ich nicht sehen – NL628

Antwort

1

Ich habe das Gefühl, dass dies funktionieren würde, : Ich änderte cell[j] zu cell[4 * i + j]

#include <stdio.h> 

void display_grid(void) 
{ 
    int i; 
    int j; 
    int cell[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 

    for (i = 0; i < 4; i++) 
    { 
     printf("|"); 
     for (j = 0; j < 4; j++) 
     { 
     printf("%d|",cell[4 * i + j]); 
     } 
     printf("\n"); 
    } 
} 

int main() 
{ 
    display_grid(); 
    return 0; 
} 

Hilft das?

0

Sie können den Restoperator % verwenden, um zu bestimmen, wann in einer neuen Zeile gedruckt werden soll. Hier ist ein Beispielprogramm mit einer display_grid() Funktion, die als Argumente ein Array von int, die Größe des Arrays und die gewünschte Größe jeder Zeile übernimmt. Wenn das Array gleichmäßig in Zeilen der gewünschten Anzahl von Spalten aufgeteilt werden kann, wird Null zurückgegeben. Andernfalls wird ein Wert ungleich null zurückgegeben. Dadurch können Sie ein 1d-Array in verschiedenen Rasterformaten anzeigen. Wenn das Array nicht gleichmäßig aufgeteilt werden kann, wird nichts gedruckt.

Derzeit werden Raster gedruckt, die Zahlen mit höchstens 2 Ziffern (oder 1 Ziffer und einem Vorzeichen) enthalten. Es wäre einfach, es zu modifizieren, um mehr Ziffern zu drucken, oder ein wenig komplizierter zu modifizieren, so dass die Anzeigebreite der maximalen Breite entspricht, die für die Eingabe benötigt wird.

#include <stdio.h> 

#define ARR_SZ 16 

int display_grid(int *arr, size_t arr_sz, size_t row_sz); 

int main(void) 
{ 
    int array[ARR_SZ]; 
    for (size_t i = 0; i < ARR_SZ; i++) { 
     array[i] = i; 
    } 

    size_t row_sz = 4; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 8; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 2; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 1; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 16; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 6; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    row_sz = 32; 
    if (display_grid(array, ARR_SZ, row_sz) != 0) { 
     fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz); 
    } 

    return 0; 
} 

int display_grid(int *arr, size_t arr_sz, size_t row_sz) 
{ 
    int ret_val = arr_sz % row_sz; 

    if (ret_val == 0) { 
     /* Print top border */ 
     putchar(' '); 
     for (size_t i = 1; i < 3 * row_sz; i++) { 
      putchar('_'); 
     } 
     putchar('\n'); 

     /* Print rows of grid */ 
     for (size_t i = 0; i < arr_sz; i++) { 
      printf("|%-2d", arr[i]); 
      if ((i + 1) % row_sz == 0) { 
       printf("|\n"); 
      } 
     } 

     /* Print bottom border */ 
     for (size_t i = 0; i < 3 * row_sz + 1; i++) { 
      putchar('-'); 
     } 
     putchar('\n'); 
    } 

    return ret_val; 
} 

Programmausgabe:

___________ 
|0 |1 |2 |3 | 
|4 |5 |6 |7 | 
|8 |9 |10|11| 
|12|13|14|15| 
------------- 
_______________________ 
|0 |1 |2 |3 |4 |5 |6 |7 | 
|8 |9 |10|11|12|13|14|15| 
------------------------- 
_____ 
|0 |1 | 
|2 |3 | 
|4 |5 | 
|6 |7 | 
|8 |9 | 
|10|11| 
|12|13| 
|14|15| 
------- 
__ 
|0 | 
|1 | 
|2 | 
|3 | 
|4 | 
|5 | 
|6 | 
|7 | 
|8 | 
|9 | 
|10| 
|11| 
|12| 
|13| 
|14| 
|15| 
---- 
_______________________________________________ 
|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15| 
------------------------------------------------- 
Array size not evenly divisible by 6 
Array size not evenly divisible by 32 
Verwandte Themen