constk

Kinda input pattern

Sep 16th, 2020 (edited)
134
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include "windows.h"
  4.  
  5. using namespace std;
  6.  
  7. struct STUDENT
  8. {
  9.     string name; // Фамилия
  10.     int yearOfBirth; // Год рождения
  11.     double academicPerformance; // Успеваемость (средняя оценка)
  12. };
  13.  
  14. STUDENT * students = NULL; // Указатель на динамический массив структур
  15. int size = 0; // Размер динамического массива
  16.  
  17. int read()
  18. {
  19.     SetConsoleCP(1251);
  20.     SetConsoleOutputCP(1251);
  21.  
  22.     cout << "Сколько студентов записать? "; // Запрашиваем число записей
  23.     int n = 0;
  24.     string input;
  25.     cin.ignore(32767, '\n'); // Игнорируем последний символ конца строки, если он есть (для корректной работы getline)
  26.     getline(cin, input);
  27.     try
  28.     {
  29.         n = stoi(input);
  30.     }
  31.     catch (const invalid_argument & e) // Введённое значение не может быть конвертировано в int или не является числом
  32.     {
  33.         cerr << "Ошибка: " << e.what() << endl;
  34.         return 1;
  35.     }
  36.     catch (const out_of_range & e) // Переполнение - введённое число больше диапазона допустимых значений
  37.     {
  38.         cerr << "Ошибка: " << e.what() << endl;
  39.         return 1;
  40.     }
  41.     if (n <= 0) // Число записей введено некорректно
  42.     {
  43.         cerr << "Нельзя записать " << n << " студентов! Количество должно быть больше или равно нулю!" << endl;
  44.         return 1;
  45.     }
  46.  
  47.  
  48.     clear(); // Очищаем старые данные
  49.  
  50.     size = n; // Выделяем память под новые
  51.     students = new STUDENT[size];
  52.  
  53.     for (int i = 0; i < size; ++i) // Осуществляем запись
  54.     {
  55.         cout << "Студент № " << i + 1 << ": " << endl;
  56.         cin.ignore(32767, '\n');
  57.         cout << "Фамилия:      "; getline(cin, students[i].name);
  58.         cout << "Год рождения: "; cin >> students[i].yearOfBirth;
  59.         cout << "Успеваемость: "; cin >> students[i].academicPerformance;
  60.     }
  61.     cout << "Данные записаны!" << endl;
  62.  
  63.     return 0;
  64. }
RAW Paste Data