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

Ввод cin - C++

Восстановить пароль Регистрация
 
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 13:44     Ввод cin #1
Я тут раньше задавал подобный вопрос, то тема умерла, по ходу. Здесь приведен листинг функции ввода калькулятора из книги Страуструпа.
Объясните мне тупому, как тут осуществляется ввод?
Ввод всего всего выражения целиком (например,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++
C++ Cin - ввод значения по умолчанию
C++ Почему не происходит ввод? (cin)
Корректный ввод с cin C++
C++ ввод данных cin >>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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
 Аватар для 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
Ответ Создать тему
Опции темы

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