C中的简单垂直直方图

时间:2013-07-12 22:05:18

标签: c

练习是在输入中打印不同字符的直方图。在底部是我的代码,我将不同的字符分成3个类别a,b或其他,如果代码成功,则推断为更多类别的字符。但它没有我想要的输出,例如,我希望输入ab cd

  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");


}

2 个答案:

答案 0 :(得分:5)

你的代码有点不对。

  1. 永远不要 - main()

    您应该使用int main(void){...} see this answer

  2. 您很难在代码中编码。提供常量变量。这有逻辑上的例外,但数字通常具有意义所以说明它。
    unsigned const int LETTERS = 3;

  3. 您花时间增加array[0]计算'a'的出现次数,但之后直接为其分配值max,而不使用该值或将其存储在其他位置

  4. 您在第一个array[0]之后分配while(){...},但max尚未初始化,因此它是“垃圾”。

  5. 在这里 - if(max>=array[i]){}你在身体里什么都不做?

  6. 您再次max分配b - 的值“垃圾”!

  7. 您应该return ...;功能main。你必须亲自看看你在那里的选择。注意:如果您遵循“1”你别无选择,只能按照这个。

  8. 你的格式,如果没有在你的“真实”代码中,在帖子中是不太理想的(即,它不是很容易阅读。
  9. 修复这些问题,你可能会解决问题。

答案 1 :(得分:1)

更改

  • array[0] = maxmax = array[0] (否则max会占用一些垃圾值)

  • max = bb = max (否则b会占用一些垃圾值)

  • putchar('x\n'){ putchar('x'); putchar('\n')} (这里需要注意的是,putchar()一次只打印一个字符,但您使用putchar('x\n')一起打印两个字符x\n!)< / em>

然后你的程序将提供所需的输出 以下是您的工作代码,其中包含上述更改:

#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;
}