Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
MrGluck
Модератор
Эксперт CЭксперт С++
7527 / 4665 / 704
Регистрация: 29.11.2010
Сообщений: 12,741
#1

cin.getline - C++

17.10.2011, 19:13. Просмотров 2003. Ответов 3
Метки нет (Все метки)

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
#include <iostream>
#include <conio.h>
#define N 100
using namespace std;
 
struct book
{
    int page;
    char str[N];
} b;
 
void f()
{
    cin>> b.page;
    cin.getline(b.str, N);
    cout<< b.page<< endl<< b.str;
}
 
int main()
{
    f();
    getch();
    return 0;
}
Почему тут как будто игнорируется строка
C++
1
cin.getline(b.str, N);
Как заставить считать в массив str строку с пробелами?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос cin.getline (C++):

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

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

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

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

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

getline(cin, str) и cin>> - C++
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl; //Выводит: &lt;пустота&gt; ...

3
easybudda
Модератор
Эксперт CЭксперт С++
9917 / 5840 / 976
Регистрация: 25.07.2009
Сообщений: 11,014
17.10.2011, 19:19 #2
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему тут как будто игнорируется строка
После ввода
Цитата Сообщение от MrGluck Посмотреть сообщение
cin>> b.page;
в потоке остаётся символ '\n', который собственно "ловит"
Цитата Сообщение от MrGluck Посмотреть сообщение
cin.getline(b.str, N);
возвращая пустую строку...
Тупой вариант:
C++
1
2
3
4
5
#include <limits>
//...
cin>> b.page;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.getline(b.str, N);
1
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.10.2011, 19:20 #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему тут как будто игнорируется строка
Там переход на следующую строку остался
C++
1
cin.ignore();
в помощь
1
Сыроежка
Заблокирован
17.10.2011, 19:20 #4
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему тут как будто игнорируется строка
C++
1
cin.getline(b.str, N);
Как заставить считать в массив str строку с пробелами?
Наверное это происходит из-за того, что вы вводите первое число и нажимаете ENTER. Ввод числа останавливается, как только встретился "не числовой символ", то есть в данном случае символ конца строки. Затем следующий cin.getline считывает пустую строку, то есть то, что находится до стмвола конца строки.

Хотел бы также сделать предложение по коду. Переменную N лучше сделать членом класса, так как ее значение действительно является характеристикой вашего класса, то есть размерностью массива - члена класса. Поэтому я бы объявил ваш класс следующим образом

C++
1
2
3
4
5
6
struct book
{
    int page;
    enum { N = 100 };
    char str[N];
} b;
Или то же самое можете сделать с помощью статической константы

C++
1
2
3
4
5
6
struct book
{
    int page;
    static const size_t N = 100;
    char str[N];
} b;
1
17.10.2011, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 19:20
Привет! Вот еще темы с ответами:

Cin вместо cin.getline - C++
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; int get_int(int default_value); char name; ...

Не работает ни cin.Get(), ни cin.Getline() - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include &quot;string.h&quot; using namespace::std; const...

cin.getline() - C++
Вопрос заключается в следующем, собственно программа отказывается выполнять cin.getline(... , ...); (... - аргументы) в начале своей ...

Getline() и cin - C++
Проблема заключается в том, что после ввода через cin , getline() не работает, точнее работает, но непонятно для меня. Я так предполагаю,...


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

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

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