Добавить в таблицу графу с общими суммами по каждому виду товара - 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; }
Объяснение кода листинга программы
- Объявление структуры данных
tabtov
с полями: tov (строка, содержащая название товара), kol (количество товара), cen (цена товара), sum (сумма товара). - Открытие файла
input.txt
для чтения и файлаoutput.txt
для записи. - Чтение данных из файла
input.txt
в структуруtabtov
до тех пор, пока не будет достигнут конец файла. - Расчет суммы товара путем умножения количества товара на его цену.
- Вывод данных (название товара, количество товара, цена товара и сумма товара) на экран.
- Запись данных в файл
output.txt
. - Если файл
output.txt
не может быть открыт для записи, выводится сообщение об ошибке и программа завершается с кодом ошибки 1. - Если файл
input.txt
не может быть открыт для чтения, выводится сообщение об ошибке и программа завершается с кодом ошибки 1. - В противном случае программа завершается с кодом ошибки 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д