Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2016, 17:34   #1
faxtrot
Новичок
Джуниор
 
Регистрация: 04.07.2016
Сообщений: 6
По умолчанию Почему игнорируется ввод?

здравия желаю товарисчи форумчане
есть такой код:
Код:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iomanip>
#include <string>

using namespace std;

class door {
    public:
        float squaredoor (); //функция расчета площади двери
        void printdoor (); //функция вывода информации о двери
        void insertdoor (); //функция добавления адреса двери, длину, ширину, дату установки, дату покрасок
        float dlinaD; //длина двери
        float shirinaD; //ширина двери
        string adress; //адрес по которому установлена дверь
        string xdate; //дата установки
    private:
};



int main()
{
    setlocale (LC_ALL, "Russian");

    int deystvie;
    cout << "1. Добавить дверь в базу\n";
    cout << "2. Добавить сотрудника в базу\n";
    cout << "3. Добавить покраску\n";
    cout << "4. Вывести расчет\n";
    cout << "Выберите действие:" << endl;
    cin >> deystvie;

    door doorobject;
    switch (deystvie)
    {
        case 1:
            cout << "Введите адрес:" << endl;
            getline (cin, doorobject.adress);
            
            cout << "Введите дату установки:" << endl;
            getline (cin, doorobject.xdate);
            
            cout << "Введите длину:" << endl;
            cin >> doorobject.dlinaD;
            
            cout << "Введите ширину:" << endl;
            cin >> doorobject.shirinaD;
            cout << "Площадь двери = " << setw(5) << doorobject.squaredoor()<<endl;
            doorobject.printdoor();
            break;

        case 2:
            cout << "Вы выбрали добавить сотрудника в базу" << endl;
            break;
        case 3:
            cout << "Вы выбрали добавить покраску:" << endl;
            break;
        case 4:
            cout << "Вы выбрали вывести расчет:" << endl;
            break;
        default:
            cout << "Введена не верная цифра. "
                 << "Повторите ввод" << endl;
                 break;
    }

    system("pause");
    return 0;
}

float door::squaredoor()
{
    return dlinaD * shirinaD;
}

void door::printdoor()
{
    cout << "Длина двери: " << dlinaD << " Ширина двери: " << shirinaD << " Площадь двери = " << squaredoor() << endl;
    cout << "Адрес двери: " << adress;
    cout << "Дата установки: " << xdate;

}
не могу понять почему в коде игнорируется ввод при выборе "добавить дверь в базу" он выводит сиаутом ввод адреса, но не дает его ввести а сразу выводит следующую строчку. проблема решается заменой этого:
Код:
cin >> deystvie;
на вот это:
Код:
(cin >> deystvie).get();
но это нелепица какая-то, программа не должна игнорировать ввод. понимает ли кто-нибудь почему так происходит?
faxtrot вне форума Ответить с цитированием
Старый 04.07.2016, 17:51   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ты недооцениваешь cin , он в реальности очень умный. Попробуй так:

Код:
	case 1:
		
		cout << "Введите адрес:" << endl;
		cin >> doorobject.adress;

		cout << "Введите дату установки:" << endl;
		cin >> doorobject.xdate;

Если адресс английский, тогда проблем нет, а если русские буквы, тогда отображение будет не корректное, почитай здесь, что надо сделать

http://cppstudio.com/post/435/

Последний раз редактировалось ura_111; 04.07.2016 в 18:02.
ura_111 вне форума Ответить с цитированием
Старый 04.07.2016, 18:06   #3
faxtrot
Новичок
Джуниор
 
Регистрация: 04.07.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Ты недооцениваешь cin , он в реальности очень умный. Попробуй так:

Код:
	case 1:
		
		cout << "Введите адрес:" << endl;
		cin >> doorobject.adress;

		cout << "Введите дату установки:" << endl;
		cin >> doorobject.xdate;

Если адресс английский, тогда проблем нет, а если русские буквы, тогда отображение будет не корректное, почитай здесь, что надо сделать

http://cppstudio.com/post/435/
нет, так не работает как надо. он выводит только до пробела. а адрес состоит из улицы, номера дома и подъезда

так что вопрос из первого поста актуален
если кто знает объясните пожалуйста, почему игнорируется ввод?

Последний раз редактировалось Вадим Мошев; 07.07.2016 в 21:32.
faxtrot вне форума Ответить с цитированием
Старый 04.07.2016, 18:38   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Добавь после

Код:
	cin >> deystvie;
	cin.get();
После cin >> deystvie; (или после аналогичного в другой части программы) в буфере клавиатуры остаётся неизвлечённым разделитель (символ перевода строки). Надо его как-нибудь оттуда устранить. Например cin.get();
ura_111 вне форума Ответить с цитированием
Старый 04.07.2016, 18:46   #5
faxtrot
Новичок
Джуниор
 
Регистрация: 04.07.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
После cin >> deystvie; (или после аналогичного в другой части программы) в буфере клавиатуры остаётся неизвлечённым разделитель (символ перевода строки). Надо его как-нибудь оттуда устранить. Например cin.get();
ну как сделать чтоб работало я знаю. у меня выше описан рабочий вариант.
но я все равно не понимаю, почему когда нет string то этот буфер не возникает? и я не понимаю что значит "не извлеченный разделитель"?? типа нет возможности добавить endl и это создает проблему?
faxtrot вне форума Ответить с цитированием
Старый 04.07.2016, 19:28   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я сам не вкурсе, но нашёл вот что

https://otvet.mail.ru/question/97479954
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод EOF c консоли - это Ctrl+Z и Ctrl+M Почему? 8Observer8 Общие вопросы по программированию, компьютерный форум 10 13.01.2023 09:33
Не могу понять почему выводится на экран два запроса на ввод числа. СИ. Павел2517 Помощь студентам 3 13.03.2016 21:17
игнорируется ввод строки Vladislavv Помощь студентам 1 22.10.2014 22:32
строка кода игнорируется при компиляции Don Karleone Общие вопросы Delphi 1 27.02.2012 03:09
Всегда игнорируется gufon PHP 17 21.12.2010 23:58