char pattern[] ="ould"; /* образец для поиска */
/* найти все строки, содержащие образец */
main
{
char line[MAXLINE];
int found = 0;
while (getline(line, MAXLINE) › 0)
if (strindex(line, pattern) ›= 0) {
printf ("%s", line);
found++;
}
return found;
}
/* getline: читает строку в s, возвращает длину */
int getline(char s[], int lim)
{
int c, i;
i = 0;
while (--lim › 0 && (c=getchar) != EOF && с != '\n') /* I.B.: misprint was here -lim instead of --lim */
s[i++] = c;
if (c == '\n')
s[i++] = c;
s[i] = '\0';
return i;
}
/* strindex: вычисляет место t в s или выдает -1, если t нет в s */
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;
}
Определение любой функции имеет следующий вид:
{
}
Отдельные части определения могут отсутствовать, как, например, в определении "минимальной" функции
dummy {}
которая ничего не вычисляет и ничего не возвращает. Такая ничего не делающая функция в процессе разработки программы бывает полезна в качестве "хранителя места". Если тип результата опущен, то предполагается, что функция возвращает значение типа
Любая программа - это просто совокупность определений переменных и функций. Связи между функциями осуществляются через аргументы, возвращаемые значения и внешние переменные. В исходном файле функции могут располагаться в любом порядке; исходную программу можно разбивать на любое число файлов, но так, чтобы ни одна из функций не оказалась разрезанной.
Инструкция return реализует механизм возврата результата от вызываемой функции к вызывающей. За словом
return
Если потребуется,
Вызывающая функция вправе проигнорировать возвращаемое значение. Более того,
Функция
Механизмы компиляции и загрузки Си-программ, расположенных в нескольких исходных файлах, в разных системах могут различаться. В системе UNIX, например, эти работы выполняет упомянутая в главе 1 команда
cc main.с getline.c strindex.c
скомпилирует указанные файлы, поместив результат компиляции в файлы объектных модулей
cc main.с getline.o strindex.o
Команда
Упражнение 4.1. Напишите функцию strindex(s, t), которая выдает позицию самого правого вхождения t в s или -1, если вхождения не обнаружено.
4.2 Функции, возвращающие нецелые значения