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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 104, средняя оценка - 4.84
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
#1

cin.ignore - C++

06.08.2013, 20:38. Просмотров 20245. Ответов 8
Метки нет (Все метки)

Как работает эта функция?
C++
1
cin.ignore (1, '#');
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос cin.ignore (C++):

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

Для чего в код вводится cin.ignore после того, как cin>> уже сработало? - C++
Доброго времени суток! Просматриваю простой код. Вводится строка типа string: фунты и дюймы Затем значения переводится в типы int и...

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

Cin.clear cin.ignore - C++
Как использовать cin.clear и cin.ignore?

Избавиться от cin.ignore() - C++
Приветствую всех! Написал простенькую программку для работы с классами. #include "stdafx.h" #include <iostream> using std::cout;...

Что делает cin.ignore(); - C++
Поясните мне, какое действие выполняет функция: cin.ignore(); Лучше на примере каком нибудь!(с комментариями) Может быть это что-то...

8
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 20:54 #2
Извлечёт и отбросит(пропустит) из потока чтения один символ.
2
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:00  [ТС] #3
Никак не могу понять какую роль именно в этой функции играет этот параметр (#)?
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
06.08.2013, 21:05 #4
...
getline(buff,max) буффер ввода и макс число символов, при этом удаляет из буфера символ разрыва строки поэтому ввод до первого пробела.
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. проскает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
2
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:09 #5
Цитата Сообщение от Erjay Посмотреть сообщение
Никак не могу понять какую роль именно в этой функции играет этот параметр (#)?
В данном примере никакой. Можно просто написать:
C++
1
cin.ignore();
Будет то же самое делать (по умолчанию: ignore(streamsize n = 1, int delim = EOF)).
2
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:11  [ТС] #6
alsav22, а здесь?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    char ch;
    cout << "Enter a phrase: ";
    while (cin.get(ch))
    {
        if (ch == '!')
            cin.putback('$');
        else
            cout << ch;
        while (cin.peek() == '#')
            cin.ignore (1, '#');
    }
    return 0;
}
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:15 #7
Если бы так:
C++
1
cin.ignore (10, '#');
то пропустит (извлечёт и отбросит) или 10 символов, или меньше, если встретит раньше '#' или EOF ('#' тоже пропустит ).
2
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:19  [ТС] #8
alsav22, от когда первое значение большое, то все понятно. Но с 1-ой, как то все запутанно.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:30 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Erjay Посмотреть сообщение
а здесь?
То же самое: если следующий символ в потоке чтения '#', то пропускается один символ.
Если написать так:
C++
1
2
while (cin.peek() == '#')
cin.ignore();
, то ничего не изменится.

Добавлено через 1 минуту
Цитата Сообщение от Erjay Посмотреть сообщение
Но с 1-ой, как то все запутанно.
Запутанно именно потому, что так ненужно писать. Можно что-то простое так написать, что долго будешь думать, прежде чем поймёшь, что тут делается.

Добавлено через 3 минуты
С одной стороны, в коде это подсказка, что будет пропускаться именно 1 символ, и именно '#', но если в отрыве от кода рассматривать, то такая запись ни к чему (да и в этом коде ни к чему, из предыдущей строки видно, что '#' будет пропускаться).

Добавлено через 4 минуты
Можно так написать, чтобы было видно в коде, что один символ пропускается:
C++
1
2
while (cin.peek() == '#')
     cin.ignore (1);
5
06.08.2013, 21:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 21:30
Привет! Вот еще темы с ответами:

Друзья getline и cin.ignore - C++
Постараюсь как можно более точно обрисовать проблему. Имеется string * v1 = new string; string * v2 = new string; string * v3 = new...

Как работает Cin.ignore() - C++
Дочитал до главы &quot;Потоки и файлы&quot; и с первого примера началось не понимание. Вот пример: #include &lt;iostream&gt; using namespace...

Что делает метод cin.ignore? - C++
cin.ignore(0,'\n'); Что она делает?

Не работает getline(cin,s), istream.ignore() - C++
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться жать ентер При использовании...


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

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

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