Как удалить строчку из структуры - 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.