-5
while (fgets(line, MAX_LINE_LEN-1, infile) != NULL) {
    num_lines += 1;
    num_chars += strlen(line);
    if (strncmp(line, "", MAX_LINE_LEN) != 0) {
        num_words++;
    }
}

整个程序计算字数。这段代码增加了文本的行数并计算了单词,但我不知道这里发生了什么。它是如何工作的?

4

2 回答 2

0
strlen( line )

给出 中的字符数line。(检查man strlen。)

num_chars += strlen( line )

将该号码添加到num_chars.

strncmp( line, "", MAX_LINE_LEN )

将 的内容line与空字符串进行比较(但为了安全起见,不要读取超过MAX_LINE_LEN的字符line,以防它不是以空值结尾的)。如果相等则返回 0。(有关详细信息,请参阅man strncmp。)

if (strncmp(line, "", MAX_LINE_LEN) != 0) {
    num_words++;
}

num_words如果line不等于空字符串则加 1 。

请注意,这num_words是用词不当,因为这里没有进行字数统计,只是计算非空行。

于 2013-05-21T06:25:11.987 回答
0

我相信通过编写代码可以大大简化代码:

if (line[0] != '\0') {

因为这就是:

if (strncmp(line, "", MAX_LINE_LEN) != 0) {

基本上是 - 它检查是否line是非空字符串。

所以回答你的问题 - 循环执行num_words后将等于文件中非空行的数量。

于 2013-05-21T06:25:38.320 回答