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

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

Войти
Регистрация
Восстановить пароль
 
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
#1

Ввод cin - C++

31.07.2013, 13:44. Просмотров 703. Ответов 3
Метки нет (Все метки)

Я тут раньше задавал подобный вопрос, то тема умерла, по ходу. Здесь приведен листинг функции ввода калькулятора из книги Страуструпа.
Объясните мне тупому, как тут осуществляется ввод?
Ввод всего всего выражения целиком (например,2 + 4 * 8) происходит в
C++
1
if(!cin.get(ch)) return curr_tok = END;
?
Если да, то ведь в плюсах буферизованное выражения после прочтения
C++
1
while (ch!='\n' && isspace(ch))
выкидывается и нигде не хранится, тогда как происходит дальнейшее обращение к ch?
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
25
26
27
28
29
30
31
32
33
34
35
36
37
token_value get_token () {
    char ch;
    do {                            //ïðîïóñêГ*ГҐГІ îáîáùåГ*Г*ûå ïðîáåëû Г§Г* èñêëþ÷åГ*ГЁГҐГ¬ \n
        if (!std::cin.get (ch)) return curr_tok = END;
    } while (ch != '\n' && isspace (ch));
    switch (ch) {
        case ';':
        case '\n':
            std::cin >> std::ws;
            return curr_tok = PRINT;
        case '*':
        case '/':
        case '+':
        case '-':
        case '(':
        case ')':
        case '=':
            return curr_tok = token_value (ch);
        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
        case '.':
            std::cin.putback (ch);
            std::cin >> number_value;
            return curr_tok=NUMBER;
        default:
            if (isalpha (ch)) {
                char* p = name_string;
                *p++ = ch;
                while (std::cin.get (ch) && isalnum (ch)) *p++ = ch;
                std::cin.putback (ch);
                *p = 0;
                return curr_tok=NAME;
            }
            error ("wrong lexical token");
            return curr_tok=PRINT;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 13:44     Ввод cin
Посмотрите здесь:

Игнорирует ввод cin - C++
Не могу понять почему не считывает переменную 'q' в 13 строке. Программа просто обходит её стороной. #include <iostream> #include...

Ввод с cin с пробелами - C++
Здравствуйте! Делаю стандартное задание по структурам. Пока сделано только добавление и показ всего. Но вот проблемка. Если название...

Ввод текста по cin - C++
Доброго времени суток. имею следующий код: OpenAsper oAsper; cin>>pathS; path = new char ; strcpy( path, pathS.c_str() ); ...

ввод данных cin >> - C++
Приветствую! #include <iostream> using namespace std; int main() {setlocale (LC_ALL,""); int qt; float...

Корректный ввод с cin - C++
Пусть в программе есть оператор cin >> n, где n типа int, а пользователь вводит набор символов Как отследить это, не выдавая ошибку, и не...

Ввод только чисел в cin>>value - C++
Доброго времени суток! Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть...

Cin - ввод значения по умолчанию - C++
Доброго дня всем. Возник вопрос... При вводе текста, к примеру: cin >> ; когда нажимаем на стрелки можно выводить значения, который...

cin читает прежний ввод - C++
Проблема такая, вот код. Когда я пишу /add все сначала норм, спрашивает cin>> queADD;, но когда доходит до cin>> ansADD;, то он второе...

Почему не происходит ввод? (cin) - C++
Здравствуйте. Скажите, пожалуйста, почему нету приглашения ввести переменную s? int main() { cout<<"Enter digits, for exit...

Чем отличается ввод с a=getch() от cin>>a; - C++
Например цикл. while(a!='\n') { cin>>a; } Если нажать Ентер цикл завершится. В отличии от while(a!='\n')

Ввод через cin нескольких чисел - C++
Здравствуйте. Требуется, чтобы пользователь ввел через запятую два числа. Используя scanf(), я бы написал примерно так:...

Ограничение на ввод символов scanf() и cin - C++
Здравствуйте. Возможно ли ограничить ввод символов после вызова scanf() или cin? Нужно чтоб после вызова этих функций пользователь...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.07.2013, 14:57     Ввод cin #2
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
выкидывается и нигде не хранится, тогда как происходит дальнейшее обращение к ch?
вот тут возвращается
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
std::cin.putback (ch);
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
31.07.2013, 15:04     Ввод cin #3
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Ввод всего всего выражения целиком (например,2 + 4 * 8) происходит в
C++
1
if(!cin.get(ch)) return curr_tok = END;
По моему, этот цикл просто отсеивает передние пробелы (до перевода строки), а само чтение идет в
C++
1
while (std::cin.get (ch) && isalnum (ch)) *p++ = ch;
tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 15:16  [ТС]     Ввод cin #4
Цитата Сообщение от Tulosba Посмотреть сообщение
вот тут возвращается
Если Вас не затруднит, можете мне хоть примерно описать что происходит, если пользователь вводит например 2 + 3*4? что, как и где обрабатывается? просто очень тяжело понять принцип работы этих потоков, когда обрабатывается вроде бы всё выражение, но используется всего лишь один символ
Yandex
Объявления
31.07.2013, 15:16     Ввод cin
Ответ Создать тему
Опции темы

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