Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
1

Не хочет работать cin.getline

28.04.2017, 10:34. Просмотров 821. Ответов 17
Метки нет (Все метки)

C++
1
cin.getline(comp.processor, 50);
Должно работать до энтера (в другом вижуале нормально работает), а в 2015 не работает без трех аргументов.. А мне именно до энтера надо..
Если делать так:
C++
1
cin.getline(comp.processor, 50, '.');
То все работает корректно
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2017, 10:34
Ответы с готовыми решениями:

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

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

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

Отличие getline() от cin.getline()
Чем отличается getline() от cin.getline() ?

Cin вместо cin.getline
#include <stdlib.h> #include <string.h> #include <fstream> using namespace...

17
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
28.04.2017, 10:39 2
А что такое comp.processor?
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
28.04.2017, 10:40 3
tanyalev,
C++
1
std::getline(std::cin, comp.processor);
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 10:43  [ТС] 4
Я использую вначале using namespace std

Добавлено через 1 минуту
Есть структура computer
comp.processor типа computer
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
28.04.2017, 10:49 5
Цитата Сообщение от tanyalev Посмотреть сообщение
Я использую вначале using namespace std
Зря. Но если настаиваете, то попробуйте:
C++
1
getline(cin, comp.processor);
Цитата Сообщение от tanyalev Посмотреть сообщение
Есть структура computer
comp.processor типа computer
Это, наверное, comp типа computer. А какого типа поле processor этой структуры?
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 10:51  [ТС] 6
Типа char
0
Даценд
Модератор
Эксперт .NET
4163 / 3942 / 2611
Регистрация: 20.04.2015
Сообщений: 7,149
28.04.2017, 11:13 7
Цитата Сообщение от tanyalev Посмотреть сообщение
Типа char
C++
1
cin >> comp.processor;
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:34  [ТС] 8
Мне же нужно, чтобы в переменную записывались символы, считая пробелы, то есть до энтера. Такой вариант не подходит.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
28.04.2017, 13:37 9
Цитата Сообщение от tanyalev Посмотреть сообщение
Типа char
Какой char? Это твоя структура?
C++
1
2
3
4
5
6
7
typedef struct
{
    char processor[25];
    char plata[25];
    float chastota;
    int operativa;
} computer;
Добавлено через 1 минуту
Цитата Сообщение от tanyalev Посмотреть сообщение
Не хочет работать cin.getline
Код показывай.
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:49  [ТС] 10
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <locale.h>
#include <fstream>
#include <string.h>
using namespace std;
 
typedef struct
{
    char processor[50], plata[4];
    float chastota;
    int operativa;
} computer;
 
 
void punkt1()
{
    int i, N, otvet, reshenie;
    computer comp;
    setlocale(LC_ALL, "Rus");
 
    cout << "Создание базы данных" << endl;
    cout << "Введите количество компьютеров, которые хотите добавить в базу данных: ";
    cin >> N;
 
    ofstream file_comp("Program.txt", ios::binary);
 
    for (i = 0; i < N; i++)
    {
        cout << "Введите информацию про " << i + 1 << " компьютер:" << endl;
        cout << "Название процессора:";
        cin.getline(comp.processor, 50);
.........
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
28.04.2017, 13:52 11
Цитата Сообщение от tanyalev Посмотреть сообщение
C++
1
cin >> N;
C++
1
(cin >> N).get();
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:54  [ТС] 12
Какая разница в записях? У меня с этой переменной проблем нет. Но почему-то так работает.
0
tanyalev
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:58  [ТС] 13
Опять таки.. Второе название не хочет работать.
0
Миниатюры
Не хочет работать cin.getline  
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
28.04.2017, 13:59 14
Разница в том, что при записи cin >> N в потоке остаётся символ перевода строки '\n', который кушает следующий std::getline.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
28.04.2017, 14:00 15
Цитата Сообщение от tanyalev Посмотреть сообщение
Какая разница в записях? У меня с этой переменной проблем нет. Но почему-то так работает.
Меньше рассуждай, если не понимаешь.
Цитата Сообщение от tanyalev Посмотреть сообщение
Второе название не хочет работать.
Кода больше показывай, что огрызки выкладываешь? Я же не вижу, что там дальше в цикле вводится, и как. Наверное, опять ввод через cin >> есть.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
28.04.2017, 14:00 16
Есть ещё способ избавиться от '\n' - cin.ignore();
0
LightDays
10 / 10 / 8
Регистрация: 19.02.2017
Сообщений: 42
Завершенные тесты: 1
28.04.2017, 14:10 17
Лучший ответ Сообщение было отмечено tanyalev как решение

Решение

tanyalev, перед считыванием информации о процессоре нужно поставить cin.get();

Вот так будет выглядеть:

C++
1
2
3
4
5
6
7
cin.get();
for (i = 0; i < N; i++)
    {
        cout << "Введите информацию про " << i + 1 << " компьютер:" << endl;
        cout << "Название процессора:";
        cin.getline(comp.processor, 50);
    }
Всё как и сказал MrGluck, после остался '\n'.
cin.getline(); - считывает информацию до Enter ('\n') и поэтому сразу же заканчивает считывать, так как в потоке наткнулся на Enter

Добавлено через 9 минут
tanyalev,

Цитата Сообщение от LightDays Посмотреть сообщение
перед считыванием информации о процессоре нужно поставить cin.get();
Код
cin.get();
Должен идти после каждого
Код
cin >> chtoto;
(если планируете считывать текст)


Пример:
C++
1
2
3
4
5
6
7
8
9
10
char a[10];
int N, N1;
 
cin >> N;
cin.get();
cin.getline(a, 10);
 
cin >> N1;
cin.get();
cin.getline(a,10);
1
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
28.04.2017, 15:49 18
Цитата Сообщение от LightDays Посмотреть сообщение
C++
1
2
cin >> N; 
cin.get();
Равнозначно (то же самое - одной строкой):
C++
1
(cin >> N).get();
Или:
C++
1
(cin >> N).ignore();
0
28.04.2017, 15:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2017, 15:49

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

Не работает ни cin.Get(), ни cin.Getline()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include...

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


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

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

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