Из файла считать числа и проверить, не равны ли они сумме двух соседних - C (СИ)
Формулировка задачи:
Помогаю 1 товарищу сделать задачу.
Надо из файла1 считывать числа, проверять не равны ли они сумме двух соседних, если равны, не записывать их в другой файл2.
Соотвественно я сделал просто - считал в массив, проверил, записал. НО его препод сказал что нафиг это хрень и динамический массив здесь не нужен, и мол нужно считывать по 3 элемента и проверять, стал переписывать и столкнулся с следующими вопросами:
я считываю по 3 элемента, допустим из файла со значениями 1 2 3 4 5 6, соотвественно я получу:
1 2 3
4 5 6
но мне нужно считывать
1 2 3
2 3 4
4 5 6
нашёл что это делается через fseek, но при этой функции у меня while на foef не реагирует т.е. бесконечный цЫкл
И ещё вопрос, я дойду до 4 5 6, не будет ли дальше читаться 5 6 "выход за пределы памяти" ? ЫЫЫ глупость спросил там же будет eof
код:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,a,b,c;
FILE *file1;
FILE *file2;
const char* file_name1 = "file1.txt";
const char* file_name2 = "file2.txt";
file1 = fopen( file_name1, "r");
file2 = fopen( file_name2, "w");
// проверка на ошибки
if (!file1 || !file2)
{
puts ("Error. File not found\n");
exit(1);
}
int i=1;
while(!feof(file1))
{
i++; //счетчик для отслеживания положенрия указателя в файле, но увы....
fscanf(file1,"%d%d%d",&a ,&b ,&c);
// fseek(file1, , ); //здесь я не очень представляю что подставлять
printf("%d %d %d\n",a, b ,c);
//дальше я тут считаю всякие if (b==a+c)
}
fclose(file2);
fclose(file1);
return 0;
}Решение задачи: «Из файла считать числа и проверить, не равны ли они сумме двух соседних»
textual
Листинг программы
int a,b,c;
fscanf(file1, "%d%d", &a, &b);
while( !feof(file1) ){
fscanf(file1, "%d", &c);
if (b==a+c) {...}
a=b; b=c;
}
Объяснение кода листинга программы
- Объявлены три переменные типа int: a, b, c.
- С помощью функции fscanf считываются два числа из файла и сохраняются в переменных a и b.
- Запускается цикл while, который будет выполняться до тех пор, пока не достигнет конца файла (feof).
- В каждой итерации цикла считывается следующее число и сохраняется в переменной c.
- С помощью условного оператора if проверяется, равно ли считанное число сумме двух предыдущих.
- Если условие if выполняется, то выполняется некоторое действие (которое в коде не указано).
- Значения переменных a и b обновляются значениями переменных b и c соответственно.
- Цикл while продолжается до тех пор, пока не достигнет конца файла.