2017-09-08 71 views
1

剛剛開始Java的第一年C後,我已經感到困惑。我嘗試將數組打印到乘法表中。它可以正常工作,但是在第一輪打印數組後,我得到了零。我已經在整個數組中分配了數據,並且在檢查後循環了正確的數量。仍然在第一個打印線後,我得到0 0 0 0 0 0 0在正確的輸出後。在C中打印時出現奇怪的輸出

#include<stdio.h> 

int main(void) 
{ 
    int kertotaulu[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
    int kertoja; 
    int indeksi; 

    for(kertoja = 0; kertoja <=15; kertoja++) { 
     if(kertoja == 0) { 
      printf("x"); 
      printf(" "); 
      for(indeksi = 0; indeksi< (sizeof(kertotaulu)/sizeof(kertotaulu[0])); indeksi++) { 
       printf("%d", kertotaulu[indeksi]); 
       printf(" "); 
      } 
     } 
     for(indeksi = 0; indeksi< (sizeof(kertotaulu)/sizeof(kertotaulu[0])); indeksi++) { 
      printf("%d", kertotaulu[indeksi]*kertoja); 
      printf(" "); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

,輸出是:

x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 
4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 
6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 
7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 
8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 
9 18 27 36 45 54 63 72 81 90 99 108 117 126 135 
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 
11 22 33 44 55 66 77 88 99 110 121 132 143 154 165 
12 24 36 48 60 72 84 96 108 120 132 144 156 168 180 
13 26 39 52 65 78 91 104 117 130 143 156 169 182 195 
14 28 42 56 70 84 98 112 126 140 154 168 182 196 210 
15 30 45 60 75 90 105 120 135 150 165 180 195 210 225 
+0

你試過調試嗎? –

+0

'kertotaulu'數組是奇特的;你真的不需要它。然後在主循環外打印標題行,然後只需在循環中打印索引1..15(含)的行。這裏有更多的代碼比真正需要的。對齊也是扭曲的;使用'%3d'而不是'%d'。使用兩個連續的'printf()'語句是毫無意義的 - 'printf(「%3d」,...)'會在一箇中完成這項工作。您還需要考慮輸出的對齊。由於有一個乘數爲1的列,您可能需要打印行號,以便第一個值在每行中出現兩次。 –

+0

嘗試:'#include int main(void) { int max = 15; printf(「%2s」,「x」); (int i = 1; i <= max; i ++) printf(「%3d」,i); putchar('\ n'); (int i = 1; i <= max; i ++) { printf(「%2d」,i); (int j = 1; j <= max; j ++) printf(「%3d」,i * j); putchar('\ n'); } return 0; }' –

回答

3

kertoja爲零的第一次通過循環,使你的第二個indeksi循環乘以零的每個元素給你所有的額外0的的。你可以添加第二個indeksi循環到另一種情況,以避免這種情況,我不確定你準備找到什麼輸出,但是如此......

+0

就是這樣!謝謝,我現在感到很蠢 – Eckersley

0

這個問題可以通過省略索引的第二個循環0如下。

int main(void) 
{ 
    int kertotaulu[15] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; 
    int kertoja; 
    int indeksi; 

    for (kertoja = 0; kertoja <= 15; kertoja++) 
    { 
     if (kertoja == 0) 
     { 
      printf("x"); 
      printf(" "); 
      for (indeksi = 0; indeksi < (sizeof(kertotaulu) 
      /sizeof(kertotaulu[0])); indeksi++) 
      { 
       printf("%d", kertotaulu[indeksi]); 
       printf(" "); 
      } 
     } 
     else // <-- change 
     { 
      for (indeksi = 0; indeksi < (sizeof(kertotaulu) 
      /sizeof(kertotaulu[0])); indeksi++) 
      { 
       printf("%d", kertotaulu[indeksi] * kertoja); 
       printf(" "); 
      } 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
0

對於kertoja爲零的情況,它是自己的循環,但它也繼續到第二個循環。一條簡單的新線和繼續應該修復它。

#include<stdio.h> 

int main(void) 
{ 
    int kertotaulu[15] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 
    int kertoja; 
    int indeksi; 

    for (kertoja = 0; kertoja <= 15; kertoja++) { 
     if (kertoja == 0) { 
      printf("x"); 
      printf(" "); 
      for (indeksi = 0; indeksi < (sizeof(kertotaulu)/sizeof(kertotaulu[0])); indeksi++) { 
       printf("%d", kertotaulu[indeksi]); 
       printf(" "); 
      } 
      printf("\n"); // New Line 
      continue; // Continue, goes to the top of loop again 
     } 
     for (indeksi = 0; indeksi < (sizeof(kertotaulu)/sizeof(kertotaulu[0])); indeksi++) { 
      printf("%d", kertotaulu[indeksi] * kertoja); 
      printf(" "); 
     } 
     printf("\n"); 
    } 
    return 0; 
}