Игнорируются условные операторы =( - C (СИ)
Формулировка задачи:
Задача:
Написать консольную программу которая должна выполнять следующие действия: • Если число введенных записей превышает 100, вывести сообщение о невозможности добавления новой записи в массив и предложить пользователю выйти из программы. В случае его согласия, вывести информацию о всех записях, ранее введенных в массив и выйти из программы, выполнив корректное освобождение ресурсов. • Если число введенных записей меньше 100, вывести сообщение: «Добавить новую запись? (y/n)». • Если пользователь выбирает n, вывести информацию о всех записях, ранее введенных в массив и выйти из программы, выполнив корректное освобождение ресурсов. • Если пользователь выбирает y, добавить запись в массив, введя необходимую информацию об объекте.Проблема:
Все работает только до второй итерации. Далее условные операторы просто игнорируются.Код:
#include <stdio.h> #include <stdlib.h> #define count 200 int main () { int i, cap=0; char y_n; struct worker_type { char name [count]; char position [count]; int year, salary; }; worker_type*workers[100];//Массив для записи информации о сотрудниках while (1) { if (cap>99) { printf ("Массив переполнен. Выйти из программы?\n"); scanf ("%c", &y_n); if (y_n=='y') break; } printf ("Добавить новую запись? (y/n)\nЛимит: %i/100\n", cap); scanf ("%c", &y_n); getchar(); if (y_n=='y' || y_n=='Y') { workers[cap]=new worker_type; printf ("Ввод имени: "); gets (workers[cap]->name);//фамилия инициалы printf ("Ввод должности: "); gets (workers[cap]->position);//должность printf ("Зарплата: "); scanf("%i", &workers[cap]->salary);//зп printf ("Год поступления: "); scanf("%i", &workers[cap]->year);//год поступления cap++; }//if yes else if (y_n=='n' || y_n=='N') break; }//while printf ("\nСписок всех сотрудников:\n"); for (i=0;i<cap;i++) printf ("\nИмя: %s\nДолжность: %s\nЗарплата: %i\nГод поступления: %i\n\n", workers[i]->name, workers[i]->position, workers[i]->salary, workers[i]->year); for (i=0;i<cap;i++) delete workers[i]; system ("pause"); }//main
Решение задачи: «Игнорируются условные операторы =(»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> #define count 200 int main () { int i, cap=0; char y_n; struct worker_type { char name [count]; char position [count]; int year, salary; }; worker_type workers[100];//Массив для записи информации о сотрудниках setlocale(LC_ALL, "Rus"); while (1) { if (cap>99) { printf ("Массив переполнен. Выйти из программы?\n"); scanf ("%c", &y_n); if (y_n=='y') break; } printf ("Добавить новую запись? (y/n)\nЛимит: %i/100\n", cap); scanf ("%c", &y_n); getchar(); if (y_n=='y' || y_n=='Y') { printf ("Ввод имени: "); gets (workers[cap].name);//фамилия инициалы printf ("Ввод должности: "); gets (workers[cap].position);//должность printf ("Зарплата: "); scanf("%i", &workers[cap].salary);//зп printf ("Год поступления: "); scanf("%i", &workers[cap].year);//год поступления getchar(); // пропустить \n cap++; }//if yes else if (y_n=='n' || y_n=='N') break; }//while printf ("\nСписок всех сотрудников:\n"); for (i=0;i<cap;i++) printf ("\nИмя: %s\nДолжность: %s\nЗарплата: %i\nГод поступления: %i\n\n", workers[i].name, workers[i].position, workers[i].salary, workers[i].year); system ("pause"); }//main
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, locale.h
- Определяется константа count, которая задает максимальный размер массива
- Определяется структура worker_type, которая содержит поля для хранения информации о сотруднике: имя, должность, год поступления и зарплата
- Создается массив workers типа worker_type на 100 элементов
- Устанавливается локальная настройка для вывода русского текста с помощью функции setlocale
- Запускается бесконечный цикл while (1), который будет выполняться до тех пор, пока не будет достигнуто условие выхода из программы
- Проверяется, достиг ли размер массива своего лимита. Если да, то выводится сообщение об переполнении и предлагается выйти из программы. Если нет, то продолжается выполнение цикла
- Пользователю предлагается добавить новую запись в массив. Для этого выводится сообщение
Добавить новую запись? (y/n)
и счетчик cap, который отслеживает количество заполненных элементов массива - Если пользователь вводит 'y' или 'Y', то начинается ввод информации о сотруднике: имя, должность, зарплата и год поступления
- Введенные данные сохраняются в соответствующих полях структуры worker_type
- Увеличивается значение счетчика cap на единицу, чтобы отслеживать количество заполненных элементов массива
- Если пользователь вводит 'n' или 'N', то цикл прерывается
- После окончания цикла выводится список всех сотрудников, для которых была введена информация
- Для каждого сотрудника выводится его имя, должность, зарплата и год поступления
- Программа ожидает нажатия любой клавиши, чтобы пользователь мог увидеть результаты работы программы
- В конце программы вызывается функция system(
pause
), чтобы программа не закрылась сразу после вывода результатов - Завершается функция main, что приводит к завершению программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д