LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 564|回复: 2

为什么这个程序不能打印“*”绘成的直方图呢?

[复制链接]
发表于 2005-5-31 20:04:36 | 显示全部楼层 |阅读模式
1.以下程序已经在linux中编译运行,但是就是不能按预想的打印出直方图,其它的一切正常,为什么呢?
2.该程序为什么在windows中编译会报错,而且报的错莫名其妙?


  1. #include <stdio.h>
  2. #define MAXHIST 15  //直方图的最大长度
  3. #define MAXWORD 10  //单词的最大长度
  4. #define IN 1        //单词内
  5. #define OUT 0       //单词外

  6. //打印单词长度直方图

  7. main()
  8. {
  9.        int c,i,nc,state;
  10.        int wl[MAXWORD];        //按字符数不同记载单词出现的次数
  11.        int over;               //超出长度范围的单词数
  12.        int maxvalue;           //输入的单词含字符的最大值
  13.        int len;                //输出的*个数
  14.        nc=0;
  15.        state=OUT;
  16.        over=0;
  17.        for(i=0;i<MAXWORD;i++)
  18.                wl[i]=0;
  19.        while((c=getchar())!=EOF){
  20.                if(c==' '||c=='\t'||c=='\n'){
  21.                        state=OUT;
  22.                        if(nc>0)
  23.                                if(nc<MAXWORD)
  24.                                        wl[nc]++;
  25.                                else
  26.                                        over++;
  27.                        nc=0;
  28.                }else if(state==OUT){   //由OUT切换到IN意味着开始进入单词
  29.                        state=IN;
  30.                        nc=1;
  31.                }else
  32.                        nc++;   //不在单词外且不处于刚进入单词开始时字符累加
  33.        }
  34.        maxvalue=0;
  35.        for(i=1;i<MAXWORD;i++)
  36.                if(maxvalue<wl[i])
  37.                        maxvalue=wl[i];
  38.        for(i=1;i<MAXWORD;i++){
  39.                printf("%5d--%5d:",i,wl[i]);
  40.                if(wl[i]>0){
  41.                        if(len=(wl[i]*MAXHIST/maxvalue)<=0)
  42.                                len=1;
  43.                }else
  44.                        len=0;
  45.                while(len>0){
  46.                        putchar('*');
  47.                        len--;
  48.                }
  49.                putchar('\n');
  50.        }
  51.        if(over>0)
  52.                printf("There are %d words >= %d\n",over,MAXWORD);
  53. }
复制代码
发表于 2005-6-1 15:31:40 | 显示全部楼层
1. 不能输出是因为优先级的问题。
  请将 if(len=(wl*MAXHIST/maxvalue)<=0)  的len赋值表达式用()括起来,如下:
      if( (len=(wl*MAXHIST/maxvalue)) <=0)
  即可正常输出。

2. 修改后再到windows下编译看看。按理说是不会再有错误的,不过我并没有在该环境下进行编译,故不保证一定没问题  ( :
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-1 20:54:27 | 显示全部楼层
谢谢,问题解决了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表