#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h> // для system()
#define MAX 100
#define LEN 64
typedef struct {
char name[LEN];
char capital[LEN];
long population;
double area;
char president[LEN];
} Country;
void input(Country a[], int *n) {
int k;
printf("Сколько добавить: ");
scanf("%d", &k);
for (int i = 0; i < k; i++) {
Country *c = &a[*n + i];
printf("Название: "); scanf(" %63[^\n]", c->name);
printf("Столица: "); scanf(" %63[^\n]", c->capital);
printf("Население: "); scanf("%ld", &c->population);
printf("Площадь: "); scanf("%lf", &c->area);
printf("Президент: "); scanf(" %63[^\n]", c->president);
}
*n += k;
}
void show(Country *c) {
printf("%-15s | %-15s | %-12ld | %-12.2f | %s\n",
c->name, c->capital, c->population, c->area, c->president);
}
void showAll(Country a[], int n) {
printf("--- Список государств ---\n");
for (int i = 0; i < n; i++) show(&a[i]);
}
void byName(Country a[], int n) {
char q[LEN];
printf("Введите название: "); scanf(" %63[^\n]", q);
int found = 0;
for (int i = 0; i < n; i++) {
if (strstr(a[i].name, q)) { show(&a[i]); found++; }
}
if (!found) printf("Не найдено.\n");
}
void byArea(Country a[], int n) {
double s;
printf("Площадь больше: "); scanf("%lf", &s);
int found = 0;
for (int i = 0; i < n; i++) {
if (a[i].area > s) { show(&a[i]); found++; }
}
if (!found) printf("Нет государств с такой площадью.\n");
}
int main() {
system("chcp 65001 > nul"); // Включаем UTF-8 в консоли
setlocale(LC_ALL, "Russian");
Country a[MAX];
int n = 0, ch;
do {
printf("\n=== МЕНЮ ===\n");
printf("1. Ввод государств\n");
printf("2. Вывод всех\n");
printf("3. Поиск по названию\n");
printf("4. Поиск по площади (больше заданной)\n");
printf("0. Выход\n");
printf("Выбор: ");
scanf("%d", &ch);
if (ch == 1) input(a, &n);
else if (ch == 2) showAll(a, n);
else if (ch == 3) byName(a, n);
else if (ch == 4) byArea(a, n);
} while (ch != 0);
return 0;
}