Язык программирования Си




Основные сведения о функциях - часть 2


После такого проектирования программы ее "деталировка" оказывается очевидной. Мы имеем представление о программе в целом и знаем, как взаимодействуют ее части. В нашей программе образец для поиска задается строкой-литералом, что снижает ее универсальность. В главе 5 мы еще вернемся к проблеме инициализации символьных массивов и покажем, как образец сделать параметром, устанавливаемым при запуске программы. Здесь приведена несколько измененная версия функции getline, и было бы поучительно сравнить ее с версией, рассмотренной в главе 1.

#include <stdio.h> #define MAXLINE 1000 /* максимальный размер вводимой строки */

int getline(char line[], int max); int strindex(char source[], char searchfor[]);

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() { }

которая ничего не вычисляет и ничего не возвращает. Такая ничего не делающая функция в процессе разработки программы бывает полезна в качестве "хранителя места". Если тип результата опущен, то предполагается, что функция возвращает значение типа int.




Содержание  Назад  Вперед