Игнорируются условные операторы =( - 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, что приводит к завершению программы