Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
#1

cin.getline - C++

17.10.2011, 19:13. Просмотров 1861. Ответов 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 строку с пробелами?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:13     cin.getline
Посмотрите здесь:

Пропускается cin.getline - C++
Здравствуйте. Функция поиска void search() { char str; int arr_1, arr_2,col_rezult = 0; int on_name = 0; int on_autor =...

Setlocal и cin.getline - C++
Привет Всем! У меня такая задачка. В начале программы setlocale(LC_ALL,&quot;rus&quot;) чтоб консоль русские буквы понимала, но по ходу программы мне...

cin.getline() не выполняется - C++
В коде ниже не выполняется cin.getline(), просто пропускает и начинает выполнять следующую строку (0.png то что получается). form z; //...

cin.getline скушал - C++
Вот ставлю чтоб ввёл 5 строк а даёт только 4, съедает 1 строку самую первую как это починить? char **s = new char* ; for(int i = 0; i...

Функция cin.getline() - C++
Имеется часть кода: void EditName(Account &amp;acc) { delete acc.name; char nam; cout&lt;&lt;&quot;Введите новое имя: &quot;; ...

Функция getline(cin,.) - C++
Здравствуйте уважаемые программисты. По темам пробежался getline(), но чет не понял, проблема, почему при вводе данных о первом человеке...

Проблема с cin.getline(); - C++
Есть вопрос по поводу использования cin.getline() после cin: cin&gt;&gt; n; char c; cin.getline(c, buf); Почему можно ввести...

В чем отличия cin.getline от gets? - C++
Напрмер, записи gets(str) от cin.getline(str, 1000) что лучше использовать?

cin.getline() не читает строку - C++
Добрый день. Нужно последовательно ввести 2 строки через cin.getline(), но после ввода первой, если она превышает допустимый размер, ввод...

Не работает cin.getline(buf, 20); - C++
Товарищи подскажите почему не работает cin.getline(buf, 20);? Проблема в том что я хочу ограничить ввод до 20 символов но оно не...

cin.getline - параметр int - C++
Доброго времени суток! Подскажите, пожалуйста, в чем дело. Я пытаюсь научиться программировать на C++ по самоучителю. Там написано,...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9459 / 5472 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
17.10.2011, 19:19     cin.getline #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);
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.10.2011, 19:20     cin.getline #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему тут как будто игнорируется строка
Там переход на следующую строку остался
C++
1
cin.ignore();
в помощь
Сыроежка
Заблокирован
17.10.2011, 19:20     cin.getline #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;
Yandex
Объявления
17.10.2011, 19:20     cin.getline
Ответ Создать тему
Опции темы

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