K&R的C编程语言练习1-13中的最后几行代码是做什么的?

杰施瓦茨

我对编程总体上还是很陌生,所以请忍受我的知识不足。

我现在已经花了几个小时进行练习1-13。我终于决定查找答案,我在此链接中找到了答案https://github.com/ccpalettes/the-c-programming-language-second-edition-solutions/blob/master/Chapter1/Exercise%201-13 /word_length.c

因为我不想为了学习而完全复制它,所以我试图理解代码然后重新制作。(这导致了几乎完整的副本,但我比其他人更了解。)

这是我到目前为止所拥有的:

#include <stdio.h>

#define IN 1
#define OUT 0
#define LARGEST 10

main() 
{
    int c, state, l, i, j;
    int length[LARGEST + 1];

    for (i = 0; i <= LARGEST; ++i)
    length[i] = 0;

    state = OUT;

    while ((c = getchar()) != EOF) {
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            if (state == OUT) {
                l = 0;
                state = IN;
            }
        ++l;
        }
        else 
            if (state == IN) {
                if (l <= LARGEST)
                    ++length[l - 1]; 
                    //minus 1 because the nth term of an array is actually array[n-1]
                else //if (l > LARGEST)
                    ++length[LARGEST];
                state = OUT;
            }
            if (c == EOF)
                break;
    }

    for (i = 0; i <= LARGEST; ++i) {
        if (i != LARGEST) //because array[10] refers to the 11th spot
            printf("\t %2d |", i + 1); //plus one because 1st is array [0] 
            //this actually results in 1-10 because the 0-9 plus one makes the highest 10
        else
            printf("\t>%2d |", LARGEST);
        for (j = 0; j < length[i]; ++j)
            putchar('x');
        putchar('\n');
    }


    return 0;
}

请忽略我的评论。它们是为我准备的,因此我可以向自己解释该程序。

我有两个我无法解决的问题,它们使我发疯:

  1. 输出总是比输入少一个字,这意味着“我的名字不是鲍勃”会导致:

    ...
    2 |xx
    3 |x
    4 |x
    ...
    
  2. 另外,我不明白程序结束时发生了什么。具体来说,我在这里不明白为什么使用变量j

     for (j = 0; j < length[i]; ++j)
         putchar('x');
    

非常感谢您的帮助,对于社区来说,这对于初学者来说还是很抱歉的。

谵妄

好吧,由于问题尚未解决,尝试总结所有答案。首先,我们需要更正main()行:

    int main(void) {
    ...
    return 0;
    }

INT因为你在函数的最后返回一个值,且是必要的无效意味着函数不接受任何参数。

  1. 我已经复制了您的代码并在我的计算机上执行(Ubuntu 12.04),它运行良好。您能否提供一些示例来产生错误?

  2. 众所周知,j只是遍历向量的变量。length [i]是一个向量,在每个位置i中都拥有长度为i的单词数例如,如果位置3的值为4,例如length [3] = 4,则意味着有4个单词的长度为3。

最后,如果可以的话,我想给你个提示。为变量选择有意义的名称是一个好习惯。在此处链接的代码帮助我了解了程序应执行的操作。变量名称(例如长度)或定义IN,OUT或LARGEST太模糊了。

我希望到目前为止能收集所有答案,并为您提供更多帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有关C编程语言(K&R)的问题-练习1-13

来自分类Dev

C编程语言第二版K&R的第1章1.5.1中的示例,

来自分类Dev

K&R的练习1-13

来自分类Dev

K&R练习1-18的意外输出(C编程语言)

来自分类Dev

K&R练习1-18的意外输出(C编程语言)

来自分类Dev

K&R练习1-16-为什么我的解决方案不起作用?

来自分类Dev

K&R C练习4-9:为什么忽略EOF?

来自分类Dev

K&R练习1-20编程语言第二版

来自分类Dev

K&R 的 C 编程,strindex 函数中最后一个 k>0 有什么作用?

来自分类Dev

K&R练习1-9解决方案C编程

来自分类Dev

在这行C#代码中,TryParse和Request.Form是做什么的?

来自分类Dev

C- K&R练习1-9

来自分类Dev

计数行“ C编程语言” K&R

来自分类Dev

C语言中的K&R编程:EX 3.3

来自分类Dev

C语言中的K&R编程:EX 3.3

来自分类Dev

动态分配指针数组(K&R练习5-13)

来自分类Dev

我无法弄清楚c中的系统调用“读取”功能。(K&R c语言书)

来自分类Dev

K&R练习1-14

来自分类Dev

K&R练习1-23

来自分类Dev

在K&R 2-1中解释此代码

来自分类Dev

这行代码在C编程中做什么?

来自分类Dev

命令行中的“ 2>&1”是做什么的?

来自分类Dev

linux中的“ ls -t | head -n 1”是做什么的?

来自分类Dev

Figure(1)是做什么的?

来自分类Dev

$ {1}和$ {*}是做什么的?

来自分类常见问题

C ++中的“ override”关键字是用来做什么的?

来自分类Dev

C ++中的sizeof()运算符是做什么的

来自分类Dev

这个在Objective C中的#define是做什么的?

来自分类Dev

C ++中的sizeof()运算符是做什么的