Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14

Не получается реализовать ввод данных с консоли

18.04.2023, 20:10. Показов 991. Ответов 16

Студворк — интернет-сервис помощи студентам
1. Реализовать класс прямоугольника с использованием инкапсуляции.
2. Поля класса должны быть в разделе private.
3. Определить методы установки свойств (при вводе некорректных значений выдавать сообщение об ошибке) и возврата значений.
4. Определить метод печати результата.
5. Реализовать на языке С++ программу, демонстрирующую использование объектов созданного класса.
Задание
Класс: Прямоугольник
Поля: высота и ширина
Операции:
• вычислить площадь и периметр прямоугольника;
• установить значения полей и вывести на экран результат вычисления;
• предусмотреть в программе проверку на корректность задаваемых параметров.

Добавлено через 2 минуты
Вот программа, не понимаю как в рамках данной программы реализовать ввод данных длина, ширина. И как предусмотреть в программе проверку на корректность. Если я задал тип float и закрыл доступ к изменению float a, float b.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*Класс Rectangle, реализованно вычисление площади и периметра.*/
class Rectangle //Класс прямоугольник.
{
private: //Модификатор закрытого доступа.
    float a; //Длинна.
    float b; //Ширина.
public: //Модификатор открытого доступа.
    Rectangle(float _a, float _b)
        : a(_a)
        , b(_b) //Перезагрузка.
    {
    }
    float Square(); //Площадь.
    float Perimeter(); //Периметр.
};
/*Формулы для вычисления площади и периметра прямоугольника.*/
float Rectangle::Square() //Класс прямоугольник, площадь.
{
    return a * b; //Формала расчёта площади.
}
float Rectangle::Perimeter() //Класс прямоугольник, периметр.
{
    return 2.f * a + 2.f * b; //Формула расчёта периметра.
}
/*Основная часть программы для вывода результатов в консоль.*/
#include <iostream> //Объявляет объекты, управляющие чтением из стандартных потоков и записью в них.
using namespace std; //Пространство имён, чтобы не печатать std.
 
int main() //Главная функция программы.
{
    setlocale(LC_ALL, "Russian"); //Русификация консоли.
    int width, height;
    Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
    cin >> width >> height;
    cout << rectangle.Square() << "\n";
    cout << rectangle.Perimeter() << "\n";
    // cout << rectangle.Square() << "-Результаты вычисления площади.\n"; //Вывод результатов
    // вычисления площади.
    // cout << rectangle.Perimeter() << "-Результаты вычисления периметра.\n"; //Вывод результатов
    // вычисления периметра.
    system("pause"); //Пауза консоли.
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2023, 20:10
Ответы с готовыми решениями:

Как реализовать запрет на ввод в консоли?
Как сделать так чтобы пользователь мог вводить только целые положительные числа

Как реализовать ввод многомерного массива пользователем с консоли?
Где ошибка? Программа коопилируется, но не получается ввести значение массива. #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

Не получается реализовать ввод/вывод в файл в классе
Доброго дня. Есть класс &quot;Спортивные соревнования&quot;, в котором есть 3 функции (добавление, удаление, редактирование). Не получается сделать...

16
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
18.04.2023, 20:14
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
cin >> width >> height;
Почему сначала используете, а только потом инициализируете?
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
18.04.2023, 20:23  [ТС]
Постараюсь объяснить.
Я студент, учусь на заочке, информации в самом институте кот наплакал и преподы какие-то беспонтовые.
Увидел подобное решение, там, сям. Попробовал примерить, понять. И видимо накосячил.

Добавлено через 3 минуты
Сначала надо cin >> width >> height;
Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта. Потом вот это?

Добавлено через 1 минуту
Поздно похоже я учиться пошёл в институт на 32 году жизни)

Добавлено через 55 секунд
Извините за глупые вопросы), стараюсь понять, везде искать информацию, всё абсолютно пробовать.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.04.2023, 21:17
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Сначала надо cin >> width >> height;
Rectangle rectangle(width, height);
Да, это логично.

Представьте что вы инициализировали ваши переменные нулями, что вполне нормально.
C++
1
2
3
4
5
6
   // объявление и инициализация наших переменных
   int width = 0, height = 0;
   // создаем объект типа Rectangle с параметрами
   Rectangle rectangle(width, height); 
   // и лишь после этого запрашиваем у пользователя ввод размеров прямоугольника
   cin >> width >> height;
Так с какими сторонами создастся наш прямоугольник ?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
18.04.2023, 21:45
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Поздно похоже я учиться пошёл в институт на 32 году жизни)
Это роли не играет, я хоть и поступил раньше, понимать программирование начал только на втором курсе, так что главное интерес
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
19.04.2023, 17:12  [ТС]
0,0.

Добавлено через 20 минут
У нас программирование началось только со 2 курса. Программирование мне интересно, но я по коду не особо пониаю пока, вот про порядок строк когда вы написали почему сначала инициализация, а потом ввод, я не сразу понял что к чему, да и понял я только касательно этого. Пока не особо понимаю что должно быть первым, а что следующим. В одной из тем на форуме были даже люди которые готовый код собрать не сразу смогли, не поняли что расскоментировать надо некоторые строки. У меня вроде проблем с пониманием этого не было, когда в колледже учился там объяснили, но там был Delphi, не очень современный и нужный что-ли язык. А вообще вот вопрос не по теме есть. На сколько сильно программисту нужна высшая математика?, компьютеры и всё что с ними связано я с детства люблю, мне отец в 3 года купил IBM 486.

Добавлено через 2 часа 26 минут
Спасибо тебе большое за помощь, теперь я понял. Можете подсказать пожалуйста как сделать в программе проверку на корректность ввода данных?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
19.04.2023, 20:39
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
На сколько сильно программисту нужна высшая математика?
Зависит от специализации программиста
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
как сделать в программе проверку на корректность ввода данных?
Если брать ограничения по размеру height и width , то сразу после ввода пишешь if() и в скобках перечисляешь условия после скобок ставишь фигурные скобки и там код, который должен выполниться после выполнения условия. Если условия должны выполняться одновременно то используешь между ними &&, если хотя бы одно, то ||
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
20.04.2023, 19:00  [ТС]
Мне нужно брать ограничение по типу, у меня там float и int, значит нельзя вводить всё остальное включая символы. Так же через if делать?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
20.04.2023, 19:32
Aleksey63tlt, если сможете, то конечно
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
20.04.2023, 20:24  [ТС]
Попробую.

Добавлено через 10 минут
Попробую что-нибудь придумать.
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
21.04.2023, 12:34  [ТС]
Нашёл вот такое решение, оно работает. вот только после ввода неправильных типов данных ввожу правильный программа как то странно работает. Помогите разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 int a;
    while (!(cin >> a) || (cin.peek() != '\n'))
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка ввода длины." << endl;
    }
    cout << "Введите ширину "; //Вывод строки ввода ширины.
    cin >> width; //Ввод значения ширины.
    int b;
    while (!(cin >> b) || (cin.peek() != '\n'))
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка ввода ширины." << endl;
    }
Миниатюры
Не получается реализовать ввод данных с консоли  
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
21.04.2023, 19:26
Aleksey63tlt, в Aleksey63tlt, предлагаю вводить нужные данные в string, а затем просто ин конвертировать в нужный тип
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
22.04.2023, 23:30  [ТС]
Вместо int в этом куске кода использовать String?

Добавлено через 2 часа 20 минут
Перепробовал что смог понять, ничего не выходит. Если первая проверка на правильность ввода цифр проходит хорошо, то вторая не проходит, появляется пустая строка вместо мною оформленной где написано введите и программа начинает считать. Ничего не понимаю.
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
23.04.2023, 00:02
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
C++
1
2
3
int width, height;
    Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
    cin >> width >> height;
C++
1
2
3
4
5
6
7
8
9
10
11
int width, height;
std::string str1,str2;
std::cin >> str1 >> str2;
width = std::stoi(str1);
height = std::stoi(str2);
if(width && height)
{
    std::cout << rectangle.Square() << "\n";
    std::cout << rectangle.Perimeter() << "\n";
}
else std::cout << "error";
Что-то типо такого
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
24.04.2023, 14:24  [ТС]
Спасибо большое за помощь, отправил без проверки на ввод данных, оценили на максимальный бал. Удачи вам во всех ваших делах и начинаниях!
0
29 / 19 / 10
Регистрация: 24.04.2023
Сообщений: 62
24.04.2023, 22:22
Для ввода данных с консоли вам нужно использовать объект cin. Для того, чтобы задать значения полей width и height объекта rectangle вам нужно сначала их ввести с консоли, а затем передать в качестве параметров конструктора Rectangle.

Вот пример, как это можно сделать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;
 
class Rectangle {
private:
    float a;
    float b;
public:
    Rectangle(float _a, float _b)
        : a(_a)
        , b(_b)
    {
    }
 
    float Square();
    float Perimeter();
};
 
float Rectangle::Square() {
    return a * b;
}
 
float Rectangle::Perimeter() {
    return 2.f * a + 2.f * b;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    float width, height;
    cout << "Введите ширину прямоугольника: ";
    cin >> width;
    cout << "Введите высоту прямоугольника: ";
    cin >> height;
 
    Rectangle rectangle(width, height);
 
    cout << "Площадь прямоугольника: " << rectangle.Square() << "\n";
    cout << "Периметр прямоугольника: " << rectangle.Perimeter() << "\n";
 
    system("pause");
}
Для проверки корректности введенных данных, можно добавить проверки на отрицательные значения или на значения, равные 0. Например, можно добавить следующие строки перед созданием объекта Rectangle:

C++
1
2
3
4
if (width <= 0 || height <= 0) {
    cout << "Некорректные значения ширины и/или высоты прямоугольника!\n";
    return 0;
}
Таким образом, если пользователь введет отрицательное или 0 значение для width или height, программа сообщит об ошибке и завершится.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.04.2023, 16:24
Цитата Сообщение от EugenyS Посмотреть сообщение
Для ввода данных с консоли вам нужно использовать объект cin
Необязательно.

Цитата Сообщение от EugenyS Посмотреть сообщение
Для того, чтобы задать значения полей width и height объекта rectangle вам нужно сначала их ввести с консоли
Необязательно, данные можно получить из любого источника.

Цитата Сообщение от EugenyS Посмотреть сообщение
а затем передать в качестве параметров конструктора Rectangle
Только если указано в задании.Иначе. необязательно предоставлять данные в конструкторе.

Добавлено через 31 секунду
Цитата Сообщение от EugenyS Посмотреть сообщение
Таким образом
Хорошая площадка для троллейй....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2023, 16:24
Помогаю со студенческими работами здесь

Пропускает ввод данных в консоли. Не работает часть кода. Пропускает ввод фио
Добрый день! Помогите пожалуйста! В void add_dinamo() пропускает cout&lt;&lt;&quot;ФИО: \t&quot; ; cin.getline(b.fio, 49); а дальше...

Реализовать все функции в виде методов. реализовать ввод и вывод данных через операторы << и >>, == и !=
Добрый вечер. Очень нужна ваша помощь. Нужно реализовать все функции в виде методов. Дополнительно реализовать ввод и вывод данных через...

Реализовать ввод строки с консоли пользователем и найти количество заданного символа в введённой строке
Ввести предложение и подсчитать сколько букв 'н' в нем.

Ввод данных с консоли
Добрый день! Такой вопрос - какой лучше метод использовать для ввода данных с консоли, которые потом принимаются на вход методу для...

Ввод данных с консоли
Как сделать ввод данных в этом коде через консоль, а не через сам код? Можете объяснить за что отвечает каждый блок и как он работает? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru