2013-07-12 93 views
1

練習是打印輸入中不同字符的直方圖。底部是我的代碼,我將不同的字符分解爲3個類別a,b或其他,以便在代碼成功時推斷出更多類別的字符。但它沒有輸出我想要的,例如,用於輸入ab cd我希望C中的簡單垂直直方圖

x 
xxx 
--- 
abo 
    t 
    h 
    e 
    r 

,但我得到的是

--- 
abo 
    t 
    h 
    e 
    r 

這裏是我的嘗試:

#include<stdio.h> 

main() 
{ 
int i,c,b, max; 
int array[3] = {0,0,0}; 


while((c = getchar()) != EOF){ 
    if(c== 'a') 
    ++array[0]; 
    else if(c== 'b') 
    ++array[1]; 
    else if(c=='\n' ||c=='\t' || c==' '){} 
    else ++array[2]; 
    } 

array[0]=max; 
i=0; 

while(i<3){ 
    if(max>=array[i]) 
     {} 
    else array[i]=max; 

    ++i; 
} 

i=0; 
max=b; 
while(i<b){ 
    if(array[0]>=max){ 
     putchar('x');} 
    else putchar(' '); 


    if(array[1]>=max) { 
     putchar('x');} 
    else putchar(' '); 


    if (array[2]>=max){ 
     putchar('x\n');} 
    else putchar(' \n'); 
    --max; 
    ++i; 


    } 

printf("---\nabo\n t\n h\n e\n r"); 


} 
+0

的分配'陣列[0] = MAX;'和'其他陣列[I] = MAX;'可能應該轉頭的其他方式(最大= ...)。您想要將該值分配給最大值,而不是其他值。類似地,由於您希望將變量_b_設置爲_max_的當前值而不是其他方式,因此應將「max = b」行更改爲「b = max」。 – Ma3x

+0

如果使用調試器執行代碼,會發生什麼情況? –

+0

您在未初始化'b'的情況下分配了'max = b'! – haccks

回答

5

有你的代碼有點不對。

  1. 永遠不要做 - main()

    您應該使用int main(void){...}see this answer

  2. 你很難將數字編碼到你的代碼中。改爲提供常量變量。有一些邏輯上的例外,但數字通常有意義,所以說明。
    unsigned const int LETTERS = 3;

  3. 你花時間來增加array[0]計數'a'的出現,但隨後爲它分配max值直接事後不使用該值或存儲在別處。

  4. 您在第一個while(){...}之後指定array[0]max尚未初始化,因此它是「垃圾」。

  5. 這裏 - if(max>=array[i]){}你沒有做任何事情在身體?

  6. 您指定max的值b - 再次「垃圾」!

  7. 您應該從main功能return ...;功能。你必須親眼看看你在那裏的選擇。注意:如果您按照「1.」你別無選擇,只能按照這一個。

  8. 您的格式,如果不是在你的「真實」的代碼,在後不到理想的(即;它不是很容易閱讀。

解決這些事情,你可能會解決這個問題。

1

變化

  • array[0] = maxmax = array[0](否則max將花費一些垃圾值)

  • max = bb = max(否則b將花費一些垃圾值)

  • putchar('x\n'){ putchar('x'); putchar('\n')}
    (一次這裏要注意,那putchar()只打印一個字符是很重要的,但你用putchar('x\n')打印兩個字符x\n在一起!)

那麼你的程序將給予所需的輸出。
這裏是與上述的變化的工作代碼:

#include<stdio.h> 

int main() 
{ 
    int i,c,b, max; 
    int array[3] = {0,0,0}; 


    while((c = getchar()) != EOF){ 
     if(c == 'a') 
      ++array[0]; 
     else if(c == 'b') 
      ++array[1]; 
     else if(c =='\n' || c =='\t' || c == ' ') 
      ; 
     else ++array[2]; 
    } 

max = array[0]; 
i=0; 

while(i<3){ 
    if(max < array[i]) 
     max = array[i]; 
i++;   
} 

i=0; 
b = max; 
while(i < b){ 
    if(array[0] >= max) 
     putchar('x'); 
    else 
     putchar(' '); 


    if(array[1] >= max) 
     putchar('x'); 
    else 
     putchar(' '); 


    if (array[2] >= max) 
    { 
     putchar('x'); 
     putchar('\n'); 
    } 
    else 
     putchar('\n'); 
    --max; 
    ++i; 


    } 

printf("---\nabo\n t\n h\n e\n r"); 

return 0; 
}