c - C 函数调用的返回值?

标签 c function while-loop

我目前正在阅读 Kernighan 和 Ritchie 的 The C Programming Language 并遇到了一些我不太理解的东西。在第 4.1 章中,提到仅打印包含特定模式的特定行:

#include <stdio.h>
#define MAXLINE 1000

int getlin(char line[], int max); /* getline() used in standard library */
int strindex(char source[], char searchfor[]);

char pattern[] = "ould";

int main()
{
    char line[MAXLINE]; 
    int found = 0;

    while (getlin(line, MAXLINE) > 0)
        if (strindex(line, pattern) >= 0) {
            printf("%s", line);
            found++;
        }
    return found;
}

int getlin(char s[], int lim)
{
    int c, i;

    i = 0;
    while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
        s[i++] = c;
    if (c == '\n')
        s[i++] = c;
    s[i] = '\0';
    return i;
}

int strindex(char s[], char t[])
{
    int i, j, k;
    for (i = 0; s[i] != '\0'; i++) {
        for (j = i, k = 0; t[k]!='\0' && s[j] == t[k]; j++, k++)
            ;
        if (k > 0 && t[k] == '\0')
            return i;
    }
    return -1;
}

抱歉,我知道它很长,但它相对简单。我唯一的问题是在第 9 行 - while (getlin(line, MAXLINE) > 0)。我不清楚这是指函数返回的 i 还是实际的 int getlin() 本身,在这种情况下 while 循环将如何停止,或者更好的问题可能是它修改的值在哪里。

最佳答案

while (getlin(line, MAXLINE) > 0)

此代码执行 getlin() 函数并检查其返回值。如果返回值为正,则继续循环,否则退出循环。

getlin() 似乎返回读取的行的长度(字符数),如果已到达文件末尾则返回零。因此,循环将继续读取行,直到没有更多行可读为止。

关于c - C 函数调用的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244673/

相关文章:

C++ 将一个对象设置为默认参数(这是一个引用)

c++ - 需要了解 while 循环条件(见评论)

c - 在 C 中根据条件实现循环

c++ - 为什么这个 C++ 函数定义不需要花括号?

c - 为什么这个 atof() 对于非 0.0 字符串数字返回 0.0?

android - android中startActivity()之后如何调用onCreate()?它之间的具体流程是什么?

java - 为什么一个空的 Java 程序会消耗内存?

Python While 循环方 block

c - 需要重新提示用户以防他输入数字而不是字母

c - 理解使用 malloc 重新分配的困难