Вывод информации о маршрутах, которые начинаются или оканчиваются в заданном пункте - C (СИ)
Формулировка задачи:
Программа: Описать структуру с именем MARSH, содержащую следующие поля: назване начального пукта маршрута, название конечного пункта маршрута, номер маршрута.
запрограммировать вывод на экран информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено с клавиатуры. Если маршрутов нет, то вывести соответствующее сообщение.
Смог описать структуру, но дальше не знаю, что делать. Прошу помочь.
#include <stdio.h>
#include <locale.h>
#include <stdio.h>
struct marsh
{
char start[100], end[100];
int num;
};
int main()
{
setlocale(LC_ALL, "RUS");
int cnt_marsh = 0, ch;
struct marsh lib[8];
do
{
printf("введите начало маршрута");
scanf("%s", lib[cnt_marsh].start);
printf("введите конец маршрута");
scanf("%s", lib[cnt_marsh].end);
printf("введите номер маршрута");
scanf("%s", lib[cnt_marsh].num);
cnt_marsh++;
} while (cnt_marsh < 3);
Еще ввод данных в массив должен состоять из восьми элементов типа Marsh
Решение задачи: «Вывод информации о маршрутах, которые начинаются или оканчиваются в заданном пункте»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <string.h>
#define N 8
struct marsh
{
char start[100], end[100];
int num;
};
int main()
{
setlocale(LC_ALL, "RUS");
int cnt_marsh = 0, flag = 0;
char str[BUFSIZ];
struct marsh lib[8];
do
{
printf("введите начало маршрута\n");
scanf("%s", lib[cnt_marsh].start);
printf("введите конец маршрута\n");
scanf("%s", lib[cnt_marsh].end);
printf("введите номер маршрута");
scanf("%d", &lib[cnt_marsh].num);
cnt_marsh++;
} while (cnt_marsh < N);
puts("Введите пункт:");
scanf("%s", str);
for(cnt_marsh = 0; cnt_marsh < N; cnt_marsh++){
if(!strcmp(str, lib[cnt_marsh].start) || !strcmp(str, lib[cnt_marsh].end)){
printf("%s %s %d", lib[cnt_marsh].start, lib[cnt_marsh].end, lib[cnt_marsh].num);
flag = 1;
break;
}
}
if(!flag)
puts("Маршрут не найден");
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем структуру marsh, которая содержит поля start (начало маршрута), end (конец маршрута) и num (номер маршрута)
- Устанавливаем локальную настройку на русский язык
- Объявляем переменные: cnt_marsh (счетчик количества введенных маршрутов), flag (флаг для определения, найден ли маршрут), str (строка для ввода пункта) и lib (массив структур marsh)
- Запускаем цикл do-while, который позволяет ввести N маршрутов
- В каждой итерации цикла запрашиваем у пользователя начало маршрута, конец маршрута и номер маршрута, и сохраняем их в соответствующие поля структуры marsh
- Увеличиваем счетчик cnt_marsh на 1 после каждого введенного маршрута
- Запрашиваем у пользователя пункт, в котором он заинтересован
- Запускаем цикл for, который проходит по всем введенным маршрутам
- Сравниваем строку str с полями start и end текущей структуры marsh, используя функцию strcmp
- Если совпадение найдено, выводим значения полей start, end и num текущей структуры marsh и устанавливаем флаг flag в 1, после чего выходим из цикла с помощью оператора break
- Если после прохода по всем маршрутам флаг flag остается равным 0, выводим сообщение
Маршрут не найден - Код не содержит обработки ошибок, возникающих при вводе данных пользователем (например, если пользователь вводит некорректные данные или не вводит их вообще)