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

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

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

cin.ignore - C++

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

Как работает эта функция?
C++
1
cin.ignore (1, '#');
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 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
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
06.08.2013, 21:05     cin.ignore #4
...
getline(buff,max) буффер ввода и макс число символов, при этом удаляет из буфера символ разрыва строки поэтому ввод до первого пробела.
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. проскает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
alsav22
5415 / 4811 / 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
5415 / 4811 / 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
Еще ссылки по теме:

C++ Зачем нужна функция cin.ignore()?
Cin.clear cin.ignore C++
C++ Как работает cin.ignore(), именно в том случае, когда он написан без параметров?
C++ Что делает cin.ignore();
C++ Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода

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

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 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
Ответ Создать тему
Опции темы

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