Вам необходимо предоставить определение функции для getline()
.
В вашей программе есть только объявление / прототип функции
int getline(char line[], int max);
для getline()
, но нет определения функции .
Что касается вашей проблемы с K&R, вы пропустили следующее из предыдущей главы 4.1 «Основы функций» незадолго до упражнения с рудиментарным калькулятором:
« Механизм компиляции и загрузки программы C, которая находится в нескольких исходных файлах, варьируется от одной системы к другой. В системе UNIX, например, эту работу выполняет команда cc, упомянутая в главе 1. Предположим, что три функции хранятся в трех файлах: main. c, getline. c и strindex. c. Затем команда
cc main.c getline.c str index.c
компилирует три files ... "
Источник: язык программирования C (версия 1.), страница 61
, а также
" Там также немного другая версия getline; y Возможно, вам будет поучительно сравнить его с тем, что приведено в главе 1 "
Источник: Язык программирования C (1. версия), стр. 60
int getline (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;
}
В примере требуется либо
- , которое вы связываете
getline.c
(с определением функции getline()
) из главы 1 при вызове компилятора или - Чтобы вы использовали другое определение
getline()
в одном из примеров программы (стр. 60) раньше.
Примечания:
Пожалуйста, переключитесь на современный и совместимый со стандартами компилятор, такой как g cc с MingW для Windows, если вас не заставляют сделать другое для класса.
Turbo C очень старый, и я думаю, что он даже не соответствовал ANSI C (C89 / C90).
Сначала я искал «Второе издание» «Языка программирования C» и не нашел ваш процитированный пример на стр. 61-62.
Пожалуйста, подумайте о том, чтобы получить копию второго издания книги. Он соответствует ANSI C и содержит важные обновления.
Вы можете получить его PDF-файл, здесь .
Относительно пункта 1 и пункт 2, main()
также больше не соответствует действующим стандартам C. Это должно быть int main (void)
.
Обратите внимание, что есть функция POSIX с тем же именем getline()
, доступная в некоторых реализациях. Вы можете получить сообщение об ошибке, если эта функция включена в вашу реализацию (но кажется, что это не так), поскольку обе функции (POSIX и K&R) имеют разные прототипы, и тогда вы попытаетесь переопределить функцию POSIX getline()
.