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

Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') - C++

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
07.07.2014, 12:00     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') #1
Задание простое: подсчитать количество символов ввода вплоть до значения '$', и оставить '$' во входном потоке.

Вот готовое решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main(void)
{
    using namespace std;
 
    char ch;
    int count = 0;
 
    while (cin.get(ch) && ch != '$')
        count++;
    if (ch == '$')
        cin.putback(ch);
   
    cout << count << " characters read\n";
    
    cout << "Then next input character is " << (char)cin.get() << endl;
    system("pause");
    return 0;
}
Как я понимаю, get() извлекает из потока символ, который мы вводим с клавиатуры, и присваивает его значению ch.
Но вот строка с if не очень понятна: если ch равен '$', то мы с помощью функции putback удаляем '\n' из потока и последним остается '$'. Но возникает вопрос: последним символом является как раз перевод строки! Почему тогда ch == '$'.

Помогите пожалуйста растолковать решение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2014, 12:00     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$')
Посмотрите здесь:

Как подсчитать количество одинаковых символов?(C++) C++
C++ В последовательности символов подсчитать количество букв и количество цифр
Подсчитать количество символов в файле C++
Как в с/с++ можно подсчитать количество символов, обработанных в единицу времени C++
C++ подсчитать количество цифровых символов(0.9)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
07.07.2014, 12:04     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') #2
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
с помощью функции putback удаляем '\n' из потока
С чего Вы это решили.
Метод putback - загоняет символ '$' обратно в поток,
т.е. при последующем get он снова прочитается.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
07.07.2014, 13:42  [ТС]     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') #3
zss, значит putback загоняет последний извлеченный символ в поток, следовательно get просто извлекает символ из потока, и в этом самом потоке его удаляет? я правильно понимаю?
ничего не понимаю честно говоря
каким образом тогда заполняется поток?

то есть если я ввожу abcd$'/n' в буфер, и cin.get по отдельности извлекает каждый символ кроме последнего, и потом обратно загоняю в буфер с помощью putback ?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
07.07.2014, 18:45     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') #4
Последний извлеченный символ у Вас $.
Потом Вы его загоняете обратно, и в потоке остаются непрочитанными
$ и '\n'.
Yandex
Объявления
07.07.2014, 18:45     Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$')
Ответ Создать тему
Опции темы

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