0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
1

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

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

Author24 — интернет-сервис помощи студентам
C++
1
cin.getline(comp.processor, 50);
Должно работать до энтера (в другом вижуале нормально работает), а в 2015 не работает без трех аргументов.. А мне именно до энтера надо..
Если делать так:
C++
1
cin.getline(comp.processor, 50, '.');
То все работает корректно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2017, 10:34
Ответы с готовыми решениями:

Метод 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...

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

17
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
28.04.2017, 10:39 2
А что такое comp.processor?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
28.04.2017, 10:40 3
tanyalev,
C++
1
std::getline(std::cin, comp.processor);
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 10:43  [ТС] 4
Я использую вначале using namespace std

Добавлено через 1 минуту
Есть структура computer
comp.processor типа computer
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
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
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 10:51  [ТС] 6
Типа char
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
28.04.2017, 11:13 7
Цитата Сообщение от tanyalev Посмотреть сообщение
Типа char
C++
1
cin >> comp.processor;
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:34  [ТС] 8
Мне же нужно, чтобы в переменную записывались символы, считая пробелы, то есть до энтера. Такой вариант не подходит.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
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
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
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 13:52 11
Цитата Сообщение от tanyalev Посмотреть сообщение
C++
1
cin >> N;
C++
1
(cin >> N).get();
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:54  [ТС] 12
Какая разница в записях? У меня с этой переменной проблем нет. Но почему-то так работает.
0
0 / 0 / 0
Регистрация: 28.01.2017
Сообщений: 52
28.04.2017, 13:58  [ТС] 13
Опять таки.. Второе название не хочет работать.
Миниатюры
Не хочет работать cin.getline  
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.04.2017, 13:59 14
Разница в том, что при записи cin >> N в потоке остаётся символ перевода строки '\n', который кушает следующий std::getline.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.04.2017, 14:00 15
Цитата Сообщение от tanyalev Посмотреть сообщение
Какая разница в записях? У меня с этой переменной проблем нет. Но почему-то так работает.
Меньше рассуждай, если не понимаешь.
Цитата Сообщение от tanyalev Посмотреть сообщение
Второе название не хочет работать.
Кода больше показывай, что огрызки выкладываешь? Я же не вижу, что там дальше в цикле вводится, и как. Наверное, опять ввод через cin >> есть.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.04.2017, 14:00 16
Есть ещё способ избавиться от '\n' - cin.ignore();
0
12 / 12 / 8
Регистрация: 19.02.2017
Сообщений: 44
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
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2017, 15:49
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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