2014-01-20 40 views
0

我正在閱讀Kernighan和Ritchie的The C Programming Language並且遇到了一些我不太明白的東西。在第4.1章,這是提到只打印包含某種模式的某些行:來自C函數調用的返回值?

#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循環會如何停止,或者更好的問題可能在於它的值在哪裏修改。

+0

你的問題很奇怪。 「getlin(line,MAXLINE)'是一個getlin函數,它會產生一個值,'&getlin',這是函數在內存中的位置嗎?你的「實際的int getlin()本身」就表明了這一點。 –

回答

0

該行將執行getlin方法並檢查返回值。

3
while (getlin(line, MAXLINE) > 0) 

該代碼執行getlin()函數並檢查其返回值。如果返回值爲正值,則循環繼續,否則循環退出。

getlin()似乎返回行讀取的長度(字符數)或零,如果文件的末尾已達到。因此,循環將繼續讀取行,直到沒有更多行要讀取。