Для функций scanf
требуется указатель на объекты, которые вы хотите заполнить значениями, поэтому:
fscanf(infile, "%le %le %le", &r_d, &r, &c);
// ^ ^ ^
будет гораздо лучшим началом.Без операторов address-of он, скорее всего, будет использовать текущее значение переменных (которые, если они имеют статическую длительность хранения, как они кажутся, будут произвольными) в качестве указателя для записи значений.Это вряд ли хорошо закончится: -)
Я бы предположил, что приличный компилятор должен по крайней мере предупреждать , что типы аргументов были не такими, как ожидалось.Если это произойдет, вы должны привыкнуть не игнорировать такие предупреждения.