1

练习是打印输入中不同字符的直方图。底部是我的代码,我将不同的字符分为 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");


}
4

2 回答 2

5

你的代码有一点问题。

  1. 永远不会做 -main()

    你应该使用int main(void){...} 看到这个答案

  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. 您的格式,如果不是在您的“真实”代码中,则在帖子中不太理想(即;它不是很容易阅读。

解决这些问题,您可能会解决问题。

于 2013-07-12T23:08:04.020 回答
1

改变

  • array[0] = maxto max = array[0] (否则max会取一些垃圾值)

  • max = bto b = 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;
}
于 2013-07-12T23:12:16.740 回答