Вы хотите, чтобы ваша программа считывала данные с beer.dat
, когда она выполняется.Файл не содержит код, который является частью вашей программы.Компилятор говорит вам, что он не знает, как интерпретировать содержимое файла как часть программы на Си.
Поэтому удалите строку #include "beer.dat"
.
Файл открывается и читается позже в search
с fopen
и fscanf
.
Вы также по-прежнему пропускаете предварительное объявление для search
.Либо поместите функцию search
перед main
, либо добавьте объявление, подобное
void search();
перед main
, чтобы компилятор знал, какие аргументы search
принимает и что возвращает, когда вы вызываете еев main
.
Включение некоторых дополнительных предупреждений с помощью -Wall -Wextra
также говорит нам, что
<source>: In function 'search':
<source>:58:26: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'FILE *' {aka 'struct _IO_FILE *'} [-Wformat=]
fscanf(fp, "%s ", fp);
~^ ~~
<source>:58:13: warning: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Wrestrict]
fscanf(fp, "%s ", fp);
^~~~~~
, потому что вы пытаетесь прочитать из файла, что обработчик fp
(первый аргумент) ссылается, и вы указываете fscanf
сохранить прочитанную строку в том месте, куда указывает обработчик файла fp
(третий аргумент).Конечно, это не имеет никакого смысла, вы хотите сохранить его в некотором массиве char
.