Удалить из файла все записи с нулевым количеством товара - C (СИ)

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

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

Дан файл, содержащий информацию о наличии товаров на складе. Структура записи файла: шифр товара, наименование, количество, цена. Написать программу, которая - выводит на экран содержимое файла; - изменяет в записи с заданным шифром количество или цену товара по запросу с клавиатуры; - удаляет из файла все записи с нулевым количеством товара. P.s. Если у вас есть время на написание хотя бы одной функции - прошу вас им воспользоваться. Завтра сдача, а файл пуст. Заранее огромное спасибо.
Наработок кода с первой функцией вывода:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
#define  N      50 /*Определяем размер массива структур*/
#define  CIPH   4   /*Определяем длину поля шифра товара в файле*/
#define  TITLE  32  /*Определеяем длину поля наименования товара в файле*/
#define  NUMB   9   /*Определеяем длину поля количества товара в файле*/
#define  PRICE  9  /*Определеяем длину поля цены товара в файле*/
 
struct goods                /*Структура записи файла*/
{
    int ciph;     /*Шифр товара*/
    char title[TITLE];   /*Наименование товара*/
    unsigned int numb;     /*Количество товара*/
    unsigned int price;   /*Цена товара*/
 
};
int add_mas(FILE *,struct goods *);
void read_str(FILE *,char *);
void menu(struct goods *,int *);
void output_all(struct goods *,int);

       /*----------------------*/
       /*    главная функция   */
       /*----------------------*/
int main()
 
{   SetConsoleCP(1251);         //ввод русских символов
    SetConsoleOutputCP(1251);   //вывод руссих символов
    struct goods mas[N];       //массив структур данных
    int kol;                    //начальное количество элементов (строк в файле) массива структур
    FILE *f;                    //указатель на входной файл
    f = fopen("goods.txt","r");
    if (!f)                     // проверка существования файла
        {
            puts("Файл goods.txt не найден, нажмие любую кнопку для завершения работы программы");
            return 1;
        }
    kol=add_mas(f,mas);
    fclose(f);
    menu(mas,&kol);
    return 0;
}
 
void menu(struct goods *mas, int *kol)
{
 char n;   /* номер пункта меню */
do
 {  system("cls");
       puts ("\n========================================================");
    puts ("Выберите номер пункта меню:");
    puts ("1 - вывод на экран содержимого файла");
    puts ("2 - изменение количества или цены товара с заданным шифром");
    puts ("3 - удаление из файла все записи с нулевым количеством товара");
    puts ("4 - выход из программы");
    puts ("------------------------------------------------------");
    n = getch();
    switch(n)
    {
        case '1': output_all(mas,*kol); break;
        case '2': puts("Вы выбрали 2\n"); break;
        case '3': puts("Вы выбрали 3\n"); break;
        case '4': break;
        default: puts("\nНеверное значение.");
    }
    if (n!='4')
    {  puts("\nДля возвращения к меню нажмите любую клавишу");
       getche();
    }
 }
       while (n != '4');
 return 0;
 
}
 
/*функция добавления данных из файла в массив структур и расположение их в алфавитном порядке*/
int add_mas(FILE *f,struct goods *mas)
{
    int i=0,j,n;
    struct goods pr;
    char ciph[CIPH], price[PRICE], numb[NUMB];
    while (!feof(f))
        {
            read_str(f,mas[i].title);
            read_str(f,ciph);
            mas[i].ciph=atoi(ciph);
            read_str(f,numb);
            mas[i].numb=atoi(numb);
            read_str(f,price);
            mas[i].price=atoi(price);
            i++;
            fgetc(f);
        }
    n=i;    //кол-во начальных строк данных
    /*расположение данных в алфавитном порядке*/
    for (i=0;i<n-1;i++)
        for(j=0;j<n-1;j++)
            if (strcmp(mas[j].title,mas[j+1].title)>0)
                {
                    pr=mas[j];
                    mas[j]=mas[j+1];
                    mas[j+1]=pr;
                }
    return n;
}
 
void read_str(FILE *f,char *zap)
{
    int i=0;
    do
        zap[i]=fgetc(f);
    while(zap[i++]!=';');
    zap[i-1]='\0';
}
 
void output_all (struct goods *mas,int n)
{
    int i;
    char otitle[]="Наименование",
         ociph[]="Шифр",
         onumb[]="Количество",
         oprice[]="Цена",
         nom[]="№";
    printf("|| %-3s|| %-32s|| %-4s|| %-9s|| %-9s||\n",nom,otitle,ociph,onumb,oprice);
    printf("==============================================================\n");
    for (i=0;i<n;i++)
        printf("|| %-3s|| %-32s|| %-4s|| %-9s|| %-9s||\n",i+1,mas[i].title,mas[i].ciph,mas[i].numb,mas[i].price);
}
Ошибка, которую он выдает при выборе пункта меню 1:

Решение задачи: «Удалить из файла все записи с нулевым количеством товара»

textual
Листинг программы
printf("|| %-3s|| %-32s|| %-4s|| %-9s|| %-9s||\n",i+1,mas[i].title,mas[i].ciph

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


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

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

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