gpt4 book ai didi

c - K & R 的 The C Programming Language 的练习 1-13 中的最后几行代码在做什么?

转载 作者:行者123 更新时间:2023-12-01 08:10:12 27 4
gpt4 key购买 nike

总的来说,我对编程很陌生,所以请原谅我的知识不足。

我现在已经在练习 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. 输出总是比输入少一个词,意思是“my name is not bob”导致:

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

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

非常感谢您的帮助,如果这对社区来说太初级了,我很抱歉。

最佳答案

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

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

int 是必需的,因为您在函数末尾返回一个值,而 void 表示该函数不接收任何参数。

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

  2. 正如大家所说,j只是一个遍历 vector 的变量。 length[i] 是一个 vector ,在每个位置 i 中包含长度为 i 的单词数。例如,如果位置 3 的值为 4,例如length[3] = 4,表示有4个字长度为 3。

最后,如果可以的话,我想给你一个提示。为变量选择有意义的名称是一种很好的做法。您链接的代码 here帮助我理解程序应该做什么。诸如长度或定义 IN、OUT 或 LARGEST 之类的变量名称过于模糊。

我希望这能收集到现在所有的答案,并能对您有所帮助。

关于c - K & R 的 The C Programming Language 的练习 1-13 中的最后几行代码在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com