2017-03-14 63 views
-2

這裏我的主要問題涉及printf()的使用和格式化說明符。我有一個包含100個元素的數組,其中大部分目前已初始化爲零。我想轉儲內容到屏幕上的格式,像這樣一個10×10塊:轉儲數組的內存內容

 0  1  2  3  4  5 ... 
0 +0000 +0000 +0000 +0000 +0000 +0000 
1 +0000 +0000 ... 
2 ... 
3 
... 

隨着我當前的代碼,我的格式是有點過 -

0  1  2  3  4  5  6  7  8  9  
    +1103 +4309 +1234 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
1 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
2 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
3 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
4 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
5 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
6 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
7 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
8 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 
9 

電流(相關)的代碼:

void dump (int *dumpMemory, int SIZE) { 
    int i = 0; 
    for (i; i < 10; ++i) {       // Output 1-10 at top row of dump 
     printf("\t%d", i); 
    } 
    puts(""); 
    for (i = 0; i < SIZE; i++) { 
     printf("\t%+05d", dumpMemory[i]); 

     if ((i % 10) == 9) { 
      printf("\n%d", (i/10)); 
     } 
    } 
    puts(""); 
} 

左側索引已向下移動一個點,因此在打印到屏幕時未正確表示其位置。

+0

您希望模數爲9的條目之後的換行符不爲0。當循環未以列9條目結束時,您可能只需要額外換行符。然後在循環之後檢查模數0。 –

+0

上面更新了輸出,改變了操作等於9.我有點困惑,爲什麼它然後將指數下移一個點。 –

回答

0

這主要是在正確的地方打印東西的問題。標題行很好。在打印條目之前,您需要打印行前綴i % 10 == 0;打印輸入後需要打印換行符i % 10 == 9;循環後,如果i % 10 != 0,您需要打印一個換行符來終止數字行。然後可以選擇添加另一個在轉儲後放置空行。

void dump(int *data, int size) 
{ 
    for (int i = 0; i < 10; ++i) // Output headings 0..9 
     printf("\t%d", i); 
    putchar('\n'); 

    for (int i = 0; i < size; i++) 
    { 
     if (i % 10 == 0) 
      printf("%d", i/10); // Consider outputting i? 
     printf("\t%+05d", data[i]); 
     if (i % 10 == 9) 
      putchar('\n'); 
    } 
    if (size % 10 != 0) 
     putchar('\n'); // Finish current/partial line 
    putchar('\n');  // Optional blank line 
}