鱼C论坛

 找回密码
 立即注册
查看: 3044|回复: 5

求找错

[复制链接]
发表于 2016-11-3 23:22:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 代码农民 于 2016-11-3 23:26 编辑

《C程序设计语言—第2版》练习1 -13
编写一个程序,印输入中单词长度的直方图。(我看的是水平的直方图程序的答案,但是运行结果...)
上代码:
/* 水平方向直方图 */
#include<stdio.h>

#define MAXHIST 15      /*  max length of histogram   */
#define MAXWORD 11  /*  max length of a word   */
#define IN                1     /*   inside a word   */
#define OUT                0    /*   outside a word  */

main()
{
        int c,i,nc,state;
        int len;
        int maxvalue;
        int ovflow;
        int wl[MAXWORD];
        
        state = OUT;
        nc = 0;
        ovflow = 0;
        for (i = 0; i < MAXWORD; ++i) 
                wl[i] = 0;
        while ((c = getchar()) != EOF) {
                if (c == ' ' || c == '\n' || c == '\t') {
                        state = OUT;
                        if (nc > 0)
                                if (nc < MAXWORD)
                                        ++wl[nc];
                                else
                                        ++ovflow;
                        nc = 0;
                } else if (state == OUT) {
                                state = IN;
                                nc = 1;
                }        else
                                ++nc;
        }
        maxvalue = 0;
        for (i = 1; i < MAXWORD; ++i)
                if (wl[i] > maxvalue)
                        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 (ovflow > 0)
                printf("There are %d words >= %d\n",ovflow,MAXWORD);
}

输入下面的文字:
Tacloban city administrator Tecson Lim said that the death toll in the city alon
e "could go up to 10,000." Tacloban is the Leyte provincial capital of 200,000 p
eople and the biggest city on Leyte Island.

^Z
我的结果是:
1.png
我在百度搜索的结果是:
8c1001e93901213f1b77a3cb56e736d12f2e9565.jpg

答案是原书答案。请问代码哪里有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-4 01:28:56 | 显示全部楼层
/* 水平方向直方图 */
#include<stdio.h>

#define MAXHIST 15      /*  max length of histogram   */
#define MAXWORD 11  /*  max length of a word   */
#define IN                1     /*   inside a word   */
#define OUT                0    /*   outside a word  */

main()
{
        int c,i,nc,state;
        int len;
        int maxvalue;
        int ovflow;
        int wl[MAXWORD];
        
        state = OUT;
        nc = 0;
        ovflow = 0;
        for (i = 0; i < MAXWORD; ++i)
                wl[i] = 0;
        while ((c = getchar()) != EOF) {
                if (c == ' ' || c == '\n' || c == '\t') {
                        state = OUT;
                        if (nc > 0)
                        {
                                if (nc < MAXWORD)
                                        ++wl[nc];
                                else
                                        ++ovflow;
                        }
                        nc = 0;
                } else if (state == OUT) {
                                state = IN;
                                nc = 1;
                }        else
                                ++nc;
        }
        maxvalue = 0;
        for (i = 1; i < MAXWORD; ++i)
                if (wl[i] > maxvalue)
                        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 (ovflow > 0)
                printf("There are %d words >= %d\n",ovflow,MAXWORD);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-4 01:49:54 | 显示全部楼层
if ((len = wl[i] * MAXHIST / maxvalue) <= 0);
这句 多了一个分号
代码好乱 整理过后基本就正常了 - -
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-4 07:43:17 | 显示全部楼层
fc1735 发表于 2016-11-4 01:28
/* 水平方向直方图 */
#include

谢谢啊!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-4 07:44:06 | 显示全部楼层
^_^^_^^_^^_^ 发表于 2016-11-4 01:49
if ((len = wl * MAXHIST / maxvalue)

谢谢!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-4 07:49:58 | 显示全部楼层
再次谢谢楼上两位!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 15:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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