QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 815|回复: 3

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

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

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

//打印单词长度直方图

main()
{
       int c,i,nc,state;
       int wl[MAXWORD];        //按字符数不同记载单词出现的次数
       int over;               //超出长度范围的单词数
       int maxvalue;           //输入的单词含字符的最大值
       int len;                //输出的*个数
       nc=0;
       state=OUT;
       over=0;
       for(i=0;i<MAXWORD;i++)
               wl[i]=0;
       while((c=getchar())!=EOF){
               if(c==' '||c=='\t'||c=='\n'){
                       state=OUT;
                       if(nc>0)
                               if(nc<MAXWORD)
                                       wl[nc]++;
                               else
                                       over++;
                       nc=0;
               }else if(state==OUT){   //由OUT切换到IN意味着开始进入单词
                       state=IN;
                       nc=1;
               }else
                       nc++;   //不在单词外且不处于刚进入单词开始时字符累加
       }
       maxvalue=0;
       for(i=1;i<MAXWORD;i++)
               if(maxvalue<wl[i])
                       maxvalue=wl[i];
       for(i=1;i<MAXWORD;i++){
               printf("%5d--%5d:",i,wl[i]);
               if(wl[i]>0){
                       if(len=(wl[i]*MAXHIST/maxvalue)<=0)
                               len=1;
               }else
                       len=0;
               while(len>0){
                       putchar('*');
                       len--;
               }
               putchar('\n');
       }
       if(over>0)
               printf("There are %d words >= %d\n",over,MAXWORD);

}
[[/code:1]
发表于 2005-6-1 14:26:24 | 显示全部楼层
看不明白的你的意思
我在vc6下编译没有任何错误!

while((c=getchar())!=EOF){ //如果这里是EOF的话,你的输入根本没有办法结束,可改为'\n'

               if(c==' '||c=='\t'||c=='\n'){  
                       state=OUT;
                       if(nc>0)
                               if(nc<MAXWORD)
                                       wl[nc]++;
                               else
                                       over++;
                       nc=0;
               }else if(state==OUT){   //由OUT切换到IN意味着开始进入单词
                       state=IN;
                       nc=1;
               }else
                       nc++;   //不在单词外且不处于刚进入单词开始时字符累加
       }
回复

使用道具 举报

发表于 2005-6-1 16:13:01 | 显示全部楼层
for(i=1;i<MAXWORD;i++){
               printf("%5d--%5d:",i,wl);
               if(wl>0){
                       if(len=(wl*MAXHIST/maxvalue)<=0)
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     /*     try if( (len = (wl*MAXHIST/maxvalue) ) <=0 )   ^_^ */
                 

                               len=1;
               }else
                       len=0;
               while(len>0){
                       putchar('*');
                       len--;
               }
               putchar('\n');
       }
回复

使用道具 举报

发表于 2005-6-2 17:07:57 | 显示全部楼层
if(len=(wl*MAXHIST/maxvalue)<=0)
也是优先级问题.楼上的说的对.
PS:
main(){
...
}
是不标准的,标准的应该是:
int main(void){
...
return 0;
}
或:
int main(int argc,char** argv){
...
return 0;
}
既然在linux上编写为何还要拿M$ VC上去??个人认为VC不如gcc!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 21:33 , Processed in 0.064539 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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