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

cin.ignore - C++

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

C++ Друзья getline и cin.ignore
C++ Не работает getline(cin,s), istream.ignore()
C++ windows.h + cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.getline и cin.ignore C++
C++ Избавиться от cin.ignore()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 20:54     cin.ignore #2
Извлечёт и отбросит(пропустит) из потока чтения один символ.
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:00  [ТС]     cin.ignore #3
Никак не могу понять какую роль именно в этой функции играет этот параметр (#)?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
06.08.2013, 21:05     cin.ignore #4
...
getline(buff,max) буффер ввода и макс число символов, при этом удаляет из буфера символ разрыва строки поэтому ввод до первого пробела.
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. проскает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:09     cin.ignore #5
Цитата Сообщение от Erjay Посмотреть сообщение
Никак не могу понять какую роль именно в этой функции играет этот параметр (#)?
В данном примере никакой. Можно просто написать:
C++
1
cin.ignore();
Будет то же самое делать (по умолчанию: ignore(streamsize n = 1, int delim = EOF)).
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:11  [ТС]     cin.ignore #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;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:15     cin.ignore #7
Если бы так:
C++
1
cin.ignore (10, '#');
то пропустит (извлечёт и отбросит) или 10 символов, или меньше, если встретит раньше '#' или EOF ('#' тоже пропустит ).
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
06.08.2013, 21:19  [ТС]     cin.ignore #8
alsav22, от когда первое значение большое, то все понятно. Но с 1-ой, как то все запутанно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 21:30     cin.ignore
Еще ссылки по теме:

Что делает метод cin.ignore? C++
C++ Как работает Cin.ignore()
C++ Зачем нужна функция cin.ignore()?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.08.2013, 21:30     cin.ignore #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);
Yandex
Объявления
06.08.2013, 21:30     cin.ignore
Ответ Создать тему
Опции темы

Текущее время: 01:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru