Если он не может открыть файл, он печатает сообщение, но затем продолжает. Вместо этого он должен вернуться из основного.
if (fp == NULL) {
printf("cannot open file\n\n");
return 1;
}
fscanf возвращает количество проанализированных элементов, поэтому, вероятно, безопаснее прекратить чтение, когда возвращенное число <4 (не все элементы могут быть прочитаны). </p>
Предположительно, "data.dat" содержит несколько записей, и каждая строка имеет конец строки. Это означает, что после прочтения первой записи следующий символ в файле - это строка, заканчивающаяся строкой «risk: 0.0». Вам следует завершить шаблон fscanf с помощью \n
.
Это потому, что во второй раз, когда он пытается проанализировать файл, fscanf увидит тот символ, которого он не ожидает (шаблон fscanf начинает "name:"), поэтому он перестанет читать и вы получите только первая запись.