Сейчас я читаю книгу Кернигана и Ритчи Язык программирования 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 когда-либо остановится, или лучший вопрос может заключаться в том, где его значение изменено.
getlin(line, MAXLINE)
, который является вызовом getlin, который возвращает значение, с&getlin
, который является расположением функции в памяти? Ваш фактический int getlin() как бы предполагает это. - person Jim Balter   schedule 21.01.2014