Как удалить строчку из структуры - C (СИ)

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

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

Добрый день, получил задание(проект), за него получу оценку на экзамене. Вот что надо выполнить Есть программа, которая регистрирует продавцов, которые ездят по стране и за каждый километр им выплачивается 0.5 евро, и за 1 обед им выделяют 7.5 евро. Но всё это не суть. Проблема в том, что я не знаю: 1. Как удалить строчку из структуры (это 5тый case. Для того, чтобы это выполнить я сначала регистрирую (допустим 5 продавцов) добавляю всем, или кому хочу еды и км, а после, выплачиваю.

Пятая

функция должна работать так. Просматривается структура, если находит продавца у которого есть км или еда, то ему выплачивают деньги, и строка удаляется, продавец удаляется. Я не знаю как это выполнить. 2. Как из файла, сканировать данные и разместить их в структуру в переменные. Это 9тый кейс. Данные надо считать в переменные, и потом также с ними взаимодействовать. Выкладываю мой код Он состоит из 2х файлов. Исходный код, и заголовочный файл

Заголовочный файл

int const MAX=100;
struct sellers {
    char name[32];
    int id;
    float meal;
    float km;
};
void menu(sellers *sel);
void Input_1(sellers *sel, int n);
void Meal_2(sellers *sel, int n);
void Add_km_3(sellers *sel, int n);
void Calculate_4(sellers*sel, int n);
//void Allow_5(sellers*sel, int n);
void List_pay_6(sellers*sel, int n);
void List_7(sellers *sel, int n);
void File_8(sellers * sel, int n);
void File_read(sellers *sel);
int menu_choose();
int search_meal(sellers *sel, int n, int id_user);

Сам код

#include <stdio.h>
#include "Header.h"
#include <cstdlib>
#include <string.h>
int n = 0;
int main() {
    sellers sel[MAX];
    menu(sel);
 
}
 
void menu(sellers *sel) {
    int menu;
    menu = menu_choose();
    switch (menu) {
    case 1:
        printf("Enter how many sellers you want to register? ");
        scanf("%d", &n);
        Input_1(sel, n);
        break;
    case 2:
        Meal_2(sel, n);
        break;
    case 3:
        Add_km_3(sel, n);
        break;
    case 4:
        Calculate_4(sel, n);
        break;
        /*  case 5:
                Allow_5(sel, n);
                break;*/
    case 6:
        List_pay_6(sel, n);
        break;
    case 7:
        List_7(sel, n);
        break;
    case 8:
        File_8(sel, n);
        break;
    case 9:
        File_read(sel);
        break;

    }
}
 
void Input_1(sellers *sel, int n) {
    for (int i = 1;i <= n;i++) {
        printf("Enter the name of a seller: ");
        scanf("%s", &sel[i].name);
        sel[i].id = i;
        sel[i].meal = 0.0;
        sel[i].km = 0.0;
    };
    menu(sel);
}
 
void Meal_2(sellers *sel, int n) {
    int id_user, check;
 
    printf("Enter the id of a seller for whom you want to add 1 meal: "); //как-нибудь отредактировать сообщение)
    scanf("%d", &id_user);
 
    check = search_meal(sel, n, id_user);
    sel[check].meal++;
 
    printf("Id\tName \t Meal \t Km \n");
    printf("%d\t%s \t %.2f \t %.2f \n", sel[check].id, sel[check].name, sel[check].meal, sel[check].km);
    menu(sel);
}
 
void Add_km_3(sellers *sel, int n) {
    int id_user, check, km;
 
    printf("Enter the id of a seller for whom you want to add km ");
    scanf("%d", &id_user);
 
    check = search_meal(sel, n, id_user);
 
    printf("How many km you want to add ");
    scanf("%d", &km);
 
    sel[check].km = sel[check].km + km;
 
    printf("Id\tName \t Meal \t Km \n");
    printf("%d\t%s \t %.2f \t %.2f \n", sel[check].id, sel[check].name, sel[check].meal, sel[check].km);
    menu(sel);
}
 
void Calculate_4(sellers*sel, int n) {
    int id_user, check;
    float pay;
 
    printf("Enter the id of a seller for whom you want to calculate ");
    scanf("%d", &id_user);
 
    check = search_meal(sel, n, id_user);
 
    pay = (sel[check].meal * 7.5) + (sel[check].km * 0.5);
 
    printf("\nWe will pay for him: %.2f\n", pay);
    menu(sel);
}
 
//void Allow_5(sellers *sel, int n) {
//  int id_user, check;
//  float pay;
//
//  printf("Enter the id of a seller for whom you want to pay\n");
//  scanf("%d", &id_user);
//
//  check = search_meal(sel, n, id_user);
//
//  
//
//  menu(sel);
//
//}

void List_pay_6(sellers*sel, int n) {
    int check, i = 0;
    for (i = 0;i <= n;i++) {
        if ((sel[i].meal > 0.0) || (sel[i].km > 0)) {
            printf("%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km);
        }
        else { continue; }
    }
    menu(sel);
}

void List_7(sellers *sel, int n) {
    printf("Id\tName \t Meal \t Km \n");
    for (int i = 1;i <= n;i++) {
        printf("%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km);
    };
    menu(sel);
}
 
void File_8(sellers * sel, int n) {
    FILE *fPointer;
    fPointer = fopen("bacon.txt", "w");
    for (int i = 1;i <= n;i++) {
        fprintf(fPointer, "%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km);
    }
    fclose(fPointer);
    menu(sel);
}
 
void File_read(sellers *sel) {
 
    char single[150];
    FILE * fPointer;
    int i = 0;
    fPointer = fopen("bacon.txt", "r+");
    while (!feof(fPointer)) {
        i++;
        fscanf(fPointer, "%d \t %s \t %f \t %f\n", &sel[i].name, &sel[i].id, &sel[i].meal, &sel[i].km);
        printf("%d \t %s \t %f \t %f\n", sel[i].name, sel[i].id, sel[i].meal, sel[i].km);
    };
    fclose(fPointer);
    menu(sel);
}
 
int menu_choose() {
    int variant;
    printf("\nChoose what you want: \n\n");
    printf("(1) Register a new seller;\n");
    printf("(2) Account new meal;\n");
    printf("(3) Add kilometers;\n");
    printf("(4) Calculate the allowances of a seller;\n");
    printf("(5) Pay allowances to a seller;\n");
    printf("(6) List all the information of sellers with allowances to receive;\n");
    printf("(7) List all the information of all sellers;\n");
    printf("(8) Write to a data file all the information;\n");
    printf("(9) Upload from the data file the collection of records;\n");
    printf("(0) Exit;\n");
    printf(">>>  ");
    scanf("%d", &variant);
    return variant;
}
 
int search_meal(sellers *sel, int n, int id_user) {
    int x;
    for (int i = 0;i <= n;i++) {
        if (sel[i].id == id_user) {
            x = i;
            return x;
        }
        else {
            continue;
        }
    }
}

Решение задачи: «Как удалить строчку из структуры»

textual
Листинг программы
sellers sel[MAX];

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

В данном коде объявляется структура sellers с именем sel и макс. количеством элементов равным MAX.

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


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

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

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