У меня есть текстовый файл с двумя столбцами:
1 2
3 4
5 6
7 8
Я хотел бы прочитать эти числа, вычислить среднее значение и сохранить результат в третий столбец того же файла. Я открыл свой файл для обновления "r+", но, похоже, он не работает. Чтение идет нормально, но когда я добавляю третий столбец, с файлом происходит что-то не то... Кажется, что он перезаписывается, в нем нет исходного содержимого, когда я вызываю свой fun - после первой инструкции цикла. Любые идеи?
#include <stdio.h>
#include <stdlib.h>
void fun(const char *filename)
{
double num1 = 0, num2 = 0, num3 = 0;
FILE *f;
if((f = fopen(filename, "r+")) == NULL)
{
exit(-1);
}
while(fscanf(f, "%lf %lf", &num1, &num2) != EOF)
{
//printf("num1 = %.2f, num2 = %.2f\n", num1, num2);
num3 = num1 + num2;
fprintf(f, "%lf %lf %lf\n", num1, num2, num3/2.0);
}
fclose(f);
}
int main(int argc, char **argv)
{
fun("numbers.txt");
return 0;
}
Когда моя программа завершает выполнение, я хотел бы иметь в своем текстовом файле 3 столбца:
1 2 1.5
3 4 3.5
5 6 5.5
7 8 7.5
Попытался также это, но моя программа просто зависает:
#include <stdio.h>
#include <stdlib.h>
void fun(const char *filename)
{
double num1 = 0, num2 = 0, num3 = 0;\
FILE *f;
if((f = fopen(filename, "r+")) == NULL)
{
exit(-1);
}
int write_at = 0, read_at = 0;
while(fscanf(f, "%lf %lf", &num1, &num2) != EOF)
{
read_at = ftell(f);
fseek(f, write_at, SEEK_SET);
num3 = num1 + num2;
fprintf(f, "%lf %lf %lf\n", num1, num2, num3/2.0);
write_at = ftell(f);
fseek(f, read_at, SEEK_SET);
}
fclose(f);
}
int main(int argc, char **argv)
{
fun("numbers.txt");
return 0;
}
getline(), но это сложно, потому что вам нужно позиционировать файловый курсор обратно в предыдущий конец, чтобы вставить туда данные. - person KarelG   schedule 19.01.2014