Чтение файла, как сделать прогон по всем строкам файла - C (СИ)
Формулировка задачи:
Вот вообщем задание:
Составить текстовый файл, состоящий из нескольких строк следующего вида:<количество чисел в строке> <число 1><чиссло 2>...<число N>.
Написать функцию нахождения произведения элементов массива произвольного размера. В программе последовательно читать из файла строки чисел, создавать динамический массив,
размер которого соответствует числу чисел в строке файла, затем вычислять сумму числовой последовательности. Результат вывести на экран.
у меня не получается сделать чтение по строкам
#include <stdio.h> #include <conio.h> #include <math.h> double proizv(float mas[100], int nn) { int l; float pro=1; for (l=0;l<nn;l++) { pro*=mas[l]; } return pro; } void main(void) { float massiv[100], m; int i,j=1,n; FILE *inp; inp = fopen ("C:\\BORLANDC\\tyt\\file\\test.txt","r"); if (inp==NULL) printf ("Owibka pri otkritii faila.\n"); printf ("proizvedenie el. massiva v stroke %d :\n",j); fscanf (inp,"%d",&n); printf ("massiv dlinnoi - %d\n",n); for (i=0;i<n;i++) fscanf(inp,"%f",&massiv[i]); for (i=0;i<n;i++) printf ("%4.2f ",massiv[i]); m=proizv(massiv,n); printf ("\nproizvedeine elementov massiva - %4.2f\n\n",m); }
Решение задачи: «Чтение файла, как сделать прогон по всем строкам файла»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stddef.h> #define FILENAME "C:\\BORLANDC\\tyt\\file\\test.txt" float multiplication(const float* arr, size_t size); int main(void) { float* arr = NULL; size_t i = 0, row = 0, size = 0; FILE* file = NULL; if ((file = fopen(FILENAME, "r")) == NULL) { perror("Error occurred: "); exit(1); } while (fscanf(file, "%d", &size) == 1) { if ((arr = (float*)malloc(size * sizeof(float))) == NULL) { printf("%s", "Error occurred: cannot allocate memory"); fclose(file); exit(1); } for (i = 0; i < size; ++i) { if (fscanf(file, "%f", &arr[i]) != 1) { perror("Error occurred: "); free(arr); exit(1); } } printf("row# %d sum %f", ++row, multiplication(arr, size)); free(arr); } } float multiplication(const float* arr, size_t size) { int i = 0; float res = 0.0f; for (; i < size; ++i) res *= arr[i]; return res; }
Объяснение кода листинга программы
- В начале кода подключаются необходимые библиотеки: stdio.h, stdlib.h, stddef.h.
- Определена константа FILENAME, которая содержит путь к файлу.
- В функции main() инициализированы необходимые переменные:
- arr - указатель на массив, который будет содержать числа из файла.
- i - счётчик для прохода по элементам массива.
- row - счётчик для прохода по строкам файла.
- size - переменная для хранения количества элементов в текущей строке.
- file - указатель на файл, который будет использоваться для чтения данных.
- Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается.
- В цикле while считывается каждая строка из файла до тех пор, пока не будет достигнут конец файла.
- Для каждой строки выделяется память под массив чисел и считываются сами числа.
- Если при считывании числа произошла ошибка (например, конец строки), выводится сообщение об ошибке, освобождается память и программа завершается.
- Вычисляется сумма чисел в текущей строке с помощью функции multiplication().
- Результат выводится на экран.
- После завершения цикла освобождается память, выделенная под массив чисел.
- В функции multiplication() происходит умножение чисел из массива и возвращается результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д