Проблема в том, что вы всегда инициализируете возраст до 15 лет, а не то, что в вашем файле. Затем вы записываете этот возраст в файл и сразу же читаете его обратно.
Если я вас правильно понял, вы хотите сначала прочитать файл (не перезаписывать его), затем выполнить расчет и записать результат обратно. .
#include<stdio.h>
#define PATH "/tmp/file"
int main()
{
FILE *file;
int age = 15, s;
file = fopen(PATH, "r");
if (file == NULL)
{
printf("files does not exist");
return 1;
}
fscanf(file, "%d", &age);
fclose(file);
scanf("%d", &s);
file = fopen(PATH, "w");
age = age - s;
fprintf(file, "%d", age);
fclose(file);
printf("%d", age);
}
Обратите внимание, что вы должны также выполнять обработку ошибок для записи, а не только для чтения. Запись может завершиться с ошибкой, если файловая система заполнена или если у вас нет прав на запись.
Однако обработка ошибок не завершена: в коде вы печатаете сообщение об ошибке, но продолжаете работать. Доступ к неверному указателю файла (например, NULL
) приведет к сбою вашей программы с ошибкой сегментации. Я добавил оператор возврата, но вы также можете поместить оставшуюся логику в блок else
.