Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
3 / 3 / 2
Регистрация: 19.07.2015
Сообщений: 74
1

Странное поведение cin

22.02.2016, 03:55. Показов 559. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс, в нем есть два текстовых private члена, friend-оператор>> и friend-функция getline для записи в эти члены. Но когда в main.cpp пытаюсь это осуществить, то в случае, если cin>>baker стоит в коде перед getmotto(cin, baker), после записи в baker.m_name не дает шанса записать в baker.m_motto , а сразу переходит к baker.show(); если же переместить cin>>baker после getmotto(cin, baker), то все становится нормально. Почему так?

players.h
C++
1
2
3
4
5
6
7
8
9
10
11
class Player 
{
    private:
         
            std::string m_name;
            char * m_motto;
   public:
            friend istream & getline(istream & is, Player & a);
            friend istream & operator>>(istream & is, Player & a);
            //т.к. принимает ссылку на Player, будет работать и с Dog, и с Owner
            friend istream & getmotto(istream & is, Player & a);
method.cpp
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
istream & operator>>(istream & is, Player & a)
        {
            is>>a.m_name;
            return is;
        }
 
istream & getline(istream & is, Player & a)
        {
            getline(is, a.m_name);
          //  is.getline(a.m_name, strlen(a.m_name));
            return is;
        }
istream & getmotto(istream & is, Player & a)
    {  delete [] a.m_motto;
        char * c=new char[200];
        std::cout<<"jere1";
        is.getline(c, 199);//getline(is, char*) не работает;
        //is.getline(char*) не работает; cin>>a.m_motto не берет пробелы;
        std::cout<<"here2";
        a.m_motto=new char[strlen(c)];
        strcpy(a.m_motto,c);
        delete [] c;
        //std::cout<<"gettingmotto";
        return is;
    }
Этот не работает:
main.cpp
C++
1
2
3
4
5
6
7
8
9
 Player baker("baker");
        baker.show();
         cin>>baker;
        cout<<endl<<"Done!";
        getmotto(cin, baker);
 
        baker.show();
 
        baker.show();
Этот работает:

main.cpp
C++
1
2
3
4
5
6
7
8
9
 Player baker("baker");
        baker.show();
         
        cout<<endl<<"Done!";
        getmotto(cin, baker);
 
        baker.show();
         cin>>baker;
        baker.show();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2016, 03:55
Ответы с готовыми решениями:

Странное поведение cin
Перегружаю оператор ввода следующим образом: #include &lt;iostream&gt; using namespace std; ...

Странное поведение операции XOR и std::cin
Объясните, пожалуйста, почему этот код работает правильно: /* Обмен значений двух переменных без...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Интересное поведение cin.getline();
Доброго времени суток! Я не устаю терроризировать форум своими тупыми вопросами, но для этого он и...

1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
22.02.2016, 04:53 2
Цитата Сообщение от parsecer Посмотреть сообщение
cin>>baker;
C++
1
(cin>>baker).get(); // после чтения через cin >>, убираем '\n' из потока, с помощью get()
Добавлено через 2 минуты
Распространенные ошибки
1
22.02.2016, 04:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2016, 04:53
Помогаю со студенческими работами здесь

Странное поведение
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого...

Странное поведение new
Объясните почему оператор new выделяет неверное количество памяти? # include &lt;iostream&gt; using...

Объяснить поведение объекта std::cin в цикле while
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;cstdlib&gt; #include&lt;windows.h&gt; using namespace std;...

Странное поведение wstring
Всем привет! Ребята, не могу понять такую ситуацию. Вставляю в wstring строку в позицию 0...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru