Возвращаемое значение из вызова функции C?

Сейчас я читаю книгу Кернигана и Ритчи Язык программирования C и наткнулся на кое-что, чего не совсем понимаю. В главе 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 когда-либо остановится, или лучший вопрос может заключаться в том, где его значение изменено.


person 5813    schedule 20.01.2014    source источник
comment
Ваш вопрос очень странный. Вы не путаете getlin(line, MAXLINE), который является вызовом getlin, который возвращает значение, с &getlin, который является расположением функции в памяти? Ваш фактический int getlin() как бы предполагает это.   -  person Jim Balter    schedule 21.01.2014


Ответы (2)


while (getlin(line, MAXLINE) > 0)

Этот код выполняет функцию getlin() и проверяет ее возвращаемое значение. Если возвращаемое значение положительное, цикл продолжается, в противном случае цикл завершается.

getlin() возвращает длину прочитанной строки (количество символов) или ноль, если достигнут конец файла. Таким образом, цикл будет продолжать чтение строк до тех пор, пока не останется строк для чтения.

person TypeIA    schedule 20.01.2014

Эта строка выполнит метод getlin и проверит возвращаемое значение.

person Justin Niessner    schedule 20.01.2014