2014-10-09 40 views
-6

我試圖創建在C空心菱形和這裏的空心鑽是我目前有:創建用C

#include <stdio.h> 

main() { 
     int n, a = 1, x, y; 

     printf("Enter size: "); 
     scanf("%d", &n); 

     a = n - 1; 

     for(x = 1; x <= n; x++) { 
       for(y = 1; y <= a; y++) printf(" "); 

       a--; 

       for(y = 1; y <= 2*x-1; y++) printf("*"); 

       printf("\n"); 
     } 

     a = 1; 

     for(x = 1; x <= n-1; x++) { 
       for (y = 1; y <= a; y++) printf(" "); 

       a++; 

       for (y = 1; y <= 2*(n-x)-1; y++) printf("*"); 

       printf("\n"); 
     } 
} 

正如你可以看到,它打印出鑽石,而不是一個空心一個。任何幫助?

+1

什麼是'大小'應該代表什麼?最寬處的寬度,還是最高處的高度? – Yann 2014-10-09 14:15:11

+0

'main()'缺少'int'。未使用'a'的初始化。 'scanf()'返回碼未經測試。一行不使用循環{}。 'main()'沒有返回值。呵呵,人道...... – DevSolar 2014-10-09 14:19:32

+0

@DevSolar:沒有{}的單線循環都可以,只要它們不是空循環即可。而且自C99以來,如果函數的末尾達到了'main',隱式'返回0'(當然,C99禁止隱式'int',所以錯誤都是這樣)。 – Deduplicator 2014-10-09 14:22:52

回答

1

四度小的變化,

for(y = 1; y <= 2*x-1; y++) printf("*"); 
printf("\n"); 

應該是這樣的,

for(y = 1; y < 2*x-1; y++) printf((y == 1) ? "*" : " "); 
printf("*\n"); 

而且,

for (y = 1; y <= 2*(n-x)-1; y++) printf("*"); 
printf("\n"); 

也應該是這樣的,

for (y = 1; y < 2*(n-x)-1; y++) printf((y == 1) ? "*" : " "); 
printf("*\n"); 

當我做出這些更改時,您的程序將打印一個空心鑽石。

+1

也建議使用顯式的'int'返回類型(不是強制的C99前的)。 – Deduplicator 2014-10-09 14:20:41

1

假設你正試圖輸出這樣的事情,

....#.... 
...###... 
..#####.. 
.###x###. 
###x x### 
.###x###. 
..#####.. 
...###... 
....#.... 

迄今爲止最簡單的方法是迭代0 < = X < =大小,0 < = Y < =大小, 並確定(x,y) - (size/2,size/2),如果該點位於周界內,則爲距離的。製作方程MIN < = 距離 < = MAX,人們可以控制鑽石的厚度。

void diamond(int size) 
{ 
    int i, j; 
    for (i = 0; i < size; i++) 
    { 
    for (j = 0; j < size; j++) 
     printf("%c", (abs(i - size/2) + abs(j - size/2)) == (size/2) ? '#' : ' '); 
    printf("\n"); 
    } 
}