Добавить в таблицу графу с общими суммами по каждому виду товара - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Прошу вашей помощи. Задача такова: В текстовом файле в табличном виде хранится информация о количестве и ценах товаров на складе. Добавить в таблицу графу с общими суммами по каждому виду товара. Я написал следующую программу:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <locale.h>
struct tabtov
{
char tov[20];
int kol;
int cen;
int sum;
};
int main(int argc, char * argv[])
{
    setlocale(LC_ALL,"Rus");
    struct tabtov *lib;
    FILE *f1,*f2;
    char str[100],file[30]; 
    int i,N,c;
    if(argc==1)
   {
      printf("Введите путь к файлу:\n");
      gets(file);
   }
   else 
   strcpy(file,argv[1]);
  
   if(((f1=fopen(file,"w"))==NULL))
   {
      perror("Ошибка открытия файла");
      system("pause");
      return 1;
   }
lib = (struct tabtov*)malloc(N*sizeof(struct tabtov));
 for(i=0;i<N;i++)
  {
    printf("Введите название %d товара:",i+1);
    gets((lib+i)->tov);
    printf("Введите цену %d товара: ",i+1);
    scanf("%d",&(lib+i)->cen);
    printf("Введите кол-во %d товара: ",i+1);
    scanf("%d",&(lib+i)->kol);
    getchar();
  }
  fclose(f1);
   if(((f1=fopen(file,"r"))==NULL))
   {
      perror("Ошибка открытия файла");
      system("pause");
      return 1;
   }
   if(((f2=fopen("output.txt","a"))==NULL))
   {
      perror("Ошибка открытия файла");
      system("pause");
      return 1;
   }
  for(i=0; i<N;i++)
{    
fscanf(f1,"%s%d%d",&tab[i].tov,&tab[i].kol,&tab[i].cen);
tab[i].sum=tab[i].kol*tab[i].cen;
fprintf(f2,"%s %d %d %d\n",tab[i].tov,tab[i].kol,tab[i].cen,tab[i].sum);
}
fclose(f1);
fclose(f2);
system("pause");
return 0;}
Но она не работает. Подскажите, пожалуйста, что нужно исправить и как?
Народ, что никто не знает как исправить?) Ну, серьезно, помогите пожалуйста, я не понемаю как исправить ошибку.

Решение задачи: «Добавить в таблицу графу с общими суммами по каждому виду товара»

textual
Листинг программы
#include <stdio.h>
struct tabtov
{
    char tov[20];
    int kol;
    double cen;
    double sum;
};
 
int main()
{
    FILE* file = fopen("C:\\input.txt", "r");
    FILE* file2 = fopen("C:\\output.txt","w");
    struct tabtov st;
    if(file)
    {
        while(fscanf(file, "%s %d %lf", st.tov, &st.kol, &st.cen) != EOF)
        {
            st.sum = st.kol*st.cen;
            printf("%s %d %0.2lf %0.2lf\n", st.tov,st.kol,st.cen,st.sum);
            if(file2)
            {
                fprintf(file2,"%s %d %0.2lf %0.2lf\n", st.tov,st.kol,st.cen,st.sum);
            }
            else
            {
                printf("Error opening file...");
                return 1;
            }
        }
        fclose(file);
        fclose(file2);
    }
    else
    {
        printf("Error opening file...");
        return 1;
    }
    return 0;
}

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

  1. Объявление структуры данных tabtov с полями: tov (строка, содержащая название товара), kol (количество товара), cen (цена товара), sum (сумма товара).
  2. Открытие файла input.txt для чтения и файла output.txt для записи.
  3. Чтение данных из файла input.txt в структуру tabtov до тех пор, пока не будет достигнут конец файла.
  4. Расчет суммы товара путем умножения количества товара на его цену.
  5. Вывод данных (название товара, количество товара, цена товара и сумма товара) на экран.
  6. Запись данных в файл output.txt.
  7. Если файл output.txt не может быть открыт для записи, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
  8. Если файл input.txt не может быть открыт для чтения, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
  9. В противном случае программа завершается с кодом ошибки 0.

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


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

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

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