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++;
}
}
整个程序计算字数。这段代码增加了文本的行数并计算了单词,但我不知道这里发生了什么。它是如何工作的?
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++;
}
}
整个程序计算字数。这段代码增加了文本的行数并计算了单词,但我不知道这里发生了什么。它是如何工作的?
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
是用词不当,因为这里没有进行字数统计,只是计算非空行。
我相信通过编写代码可以大大简化代码:
if (line[0] != '\0') {
因为这就是:
if (strncmp(line, "", MAX_LINE_LEN) != 0) {
基本上是 - 它检查是否line
是非空字符串。
所以回答你的问题 - 循环执行num_words
后将等于文件中非空行的数量。