Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
10 / 10 / 8
Регистрация: 05.02.2014
Сообщений: 124
1

Не работает ни cin.Get(), ни cin.Getline()

26.08.2014, 23:00. Просмотров 4609. Ответов 7
Метки нет (Все метки)


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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include "windows.h"
#include "string.h"
using namespace::std;
const int LEN = 80;       // максимальная длина имени
class employee            // некий сотрудник
{
private:
    char name[LEN];     // имя сотрудника
    unsigned long number; // номер сотрудника
public:
    void getdata()
    {
        cout << "\n  Введите фамилию: "; cin >> name;
        OemToCharA((LPCSTR)name, (LPSTR)name);
        cout << "  Введите номер: ";  cin >> number;
    }
    void putdata() const
    {
        cout << "\n  Фамилия: " << name;
        cout << "\n  Номер: " << number;
    }
};
class manager : private employee /*private student */// менеджер
{
private:
    char title[LEN];    // должность сотрудника
    double dues;          // сумма взносов в гольф-клуб
public:
    void getdata()
    {
        employee::getdata();
        cout << "  Введите должность: "; 
//cin.getline(title, LEN);
//cin.get(title, LEN);
        cin >> title;
        OemToCharA((LPCSTR)title, (LPSTR)title);
        cout << "  Введите сумму взносов в гольф-клуб: "; cin >> dues;
    }
    void putdata() const
    {
        employee::putdata();
        cout << "\n  Должность: " << title;
        cout << "\n  Сумма взносов в гольф-клуб: " << dues;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    manager ob;
    ob.getdata();
    ob.putdata();
    _getch();
    return 0;
}
Не понимаю, почему не работает ни cin.get(), ни cin.getline(). Хочу ввести два слова через пробел. Как только до cin.get(title, LEN) доходит, сразу идет вывод и выводит мусор, а cin.getline(title, LEN) тупо пропускает ввод.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2014, 23:00
Ответы с готовыми решениями:

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

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть...

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с...

Объясните работу методов cin.getline и cin.ignore
Фрагмент программы ниже. Что делают cin.getline и cin.ignore (12-13 строки) void...

7
Почетный модератор
7356 / 2619 / 275
Регистрация: 29.07.2006
Сообщений: 13,674
26.08.2014, 23:08 2
Цитата Сообщение от Gygocopter Посмотреть сообщение
Хочу ввести два слова через пробел.
C++
1
2
std::wstring first, second;
std::wcin>>first>>second;
0
10 / 10 / 8
Регистрация: 05.02.2014
Сообщений: 124
26.08.2014, 23:46  [ТС] 3
Написал неточно. Почему не работает cin.get(), cin,getline()? Как исправить?
Vourhey, по-русски вводишь и мусор получается.
И два слова в один массив title[LEN], через пробел, НЕ по отдельности.
0
Почетный модератор
7356 / 2619 / 275
Регистрация: 29.07.2006
Сообщений: 13,674
27.08.2014, 00:01 4
Цитата Сообщение от Gygocopter Посмотреть сообщение
Почему не работает cin.get(), cin,getline()?
Потому что они закомментированы.
Цитата Сообщение от Gygocopter Посмотреть сообщение
И два слова в один массив title[LEN], через пробел, НЕ по отдельности.
И как второй вызов get/getline должен узнать, что он должен псиать второе слово не в title, а дописывать его туда? Догадаться?
0
10 / 10 / 8
Регистрация: 05.02.2014
Сообщений: 124
27.08.2014, 00:09  [ТС] 5
Vourhey, специально закомментировал. cin>>title позволяет ввести одно слово.
cin.get() и cin.getline(), насколько я знаю, позволяют вводить вместе с пробелами до символа '\n'(если 3 параметр пуст). Мне и нужно ввести через cin.get() ИЛИ через cin.getline() в массив title, например, "Вася Пупкин", но почему-то не работают. Ошибки указаны в 1 посте.
Вы, наверное, не так всё поняли.
0
Почетный модератор
7356 / 2619 / 275
Регистрация: 29.07.2006
Сообщений: 13,674
27.08.2014, 00:31 6
Вопрос - с латинскими символами работает? Потому что cin.getline(title, LEN); должен отрабатывать нормально.
Цитата Сообщение от Gygocopter Посмотреть сообщение
OemToCharA((LPCSTR)title, (LPSTR)title);
Не должно быть, но все-таки ради эксперимента попробуй использовать при вводе вместо title временный массив, а title тут в качестве destination.

Добавлено через 2 минуты
Это, блин, с дебагером все проверяется на раз-два. Возьми дебагер, да проверь, что у тебя попадает в title и что там после eom-бла-бла-бла. Для кого, блин, дебаггер придумали люди, не понятно...
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
27.08.2014, 09:16 7
Не мучайся, используй для хранения строк std::string и читай их так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <limits>
 
int main()
{
    std::cout << "Enter your text: ";
    std::string text;
    getline (std::cin, text);
    std::cout << std::endl << text << std::endl;
 
    return 0;
}
1
10 / 10 / 8
Регистрация: 05.02.2014
Сообщений: 124
27.08.2014, 19:50  [ТС] 8
Всем спасибо, разобрался!)
Проблема из-за '\n', который остается в потоке при вводе через cin.get() и cin>>
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2014, 19:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get...

cin.getline и cin.ignore
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый...

Cin вместо cin.getline
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; int...

getline(cin, str) и cin>>
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.