Здесь много чего происходит.
Основная проблема заключается в том, что этот цикл:
for(tmp = getc(file); tmp != EOF; tmp = getc(file)){
if ( tmp == '\n')
line_number++;
}
проходит через файл до конца, что означает, что fscanf()
ничего не осталось для чтения. Если вы хотите прочитать весь файл один раз, чтобы узнать количество строк, а затем снова прочитать его, чтобы прочитать содержимое, вам придется либо а) закрыть и снова открыть его, либо б) использовать rewind()
или fseek()
функция для возврата к началу файла.
(Если честно, еще лучшим решением было бы разработать код так, чтобы вам не нужно было читать файл дважды. Если вы попытаетесь это сделать и застрянете, задайте еще раз новый вопрос по этому вопросу сайт.)
Кроме того, вы должны добавить эти строки в начале вашего кода:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
для чтения в заголовочных файлах, которые определяют используемые вами функции, и поместите эту строку после определения struct vect
, чтобы определить тип:
typedef struct vect vect;
Также, пожалуйста, запустите ваш компилятор с включенными предупреждениями. Это помогло бы вам самостоятельно найти некоторые из этих проблем!