从C函数调用返回值?

时间:2014-01-20 21:37:52

标签: 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循环如何停止,或者更好的问题可能在哪里?它的价值被修改了。

2 个答案:

答案 0 :(得分:3)

while (getlin(line, MAXLINE) > 0)

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

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

答案 1 :(得分:0)

该行将执行getlin方法并检查返回值。