Чтение файла, как сделать прогон по всем строкам файла - 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;
}

Объяснение кода листинга программы

  1. В начале кода подключаются необходимые библиотеки: stdio.h, stdlib.h, stddef.h.
  2. Определена константа FILENAME, которая содержит путь к файлу.
  3. В функции main() инициализированы необходимые переменные:
    • arr - указатель на массив, который будет содержать числа из файла.
    • i - счётчик для прохода по элементам массива.
    • row - счётчик для прохода по строкам файла.
    • size - переменная для хранения количества элементов в текущей строке.
    • file - указатель на файл, который будет использоваться для чтения данных.
  4. Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается.
  5. В цикле while считывается каждая строка из файла до тех пор, пока не будет достигнут конец файла.
  6. Для каждой строки выделяется память под массив чисел и считываются сами числа.
  7. Если при считывании числа произошла ошибка (например, конец строки), выводится сообщение об ошибке, освобождается память и программа завершается.
  8. Вычисляется сумма чисел в текущей строке с помощью функции multiplication().
  9. Результат выводится на экран.
  10. После завершения цикла освобождается память, выделенная под массив чисел.
  11. В функции multiplication() происходит умножение чисел из массива и возвращается результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы