Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по управляющим последовательностям 
:(
    Опции темы
0761
Дата 14.7.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



Не получается реализовать такую часть кода:

Код
char ch;
do
{
    cout << "Нажми 1 или 2: ";
    cin >> ch;
    switch (ch)
    {
    case '1':
        a.payingCar();
        break;
    case '2':
        a.nopayCar();
        break;
    }
}
while (ch != '\n');


Задача, по-моему, ясна. При нажатии на клавишу Enter я должен выйти из цикла. Пробовал с другими управляющими последовательностями, результата никакого. Так же не получается с шестнадцатеричным представлением. 
Компилятор VS 2010. 
Заранее спасибо=) 

Модератор: рекомендую пользоваться кнопкой "Код"

Это сообщение отредактировал(а) bsa - 15.7.2011, 22:11
PM MAIL   Вверх
JЕT
Дата 15.7.2011, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 30.9.2010

Репутация: нет
Всего: нет



Можно реализовать вот так:

Код

#include <iostream>

int main(int argc, char *argv[])
{
    char terninator = 0;

    while(true)
    {
        terninator = std::cin.get();

        if(terninator == '\n')
        {
            std::cout << "Terminator was found!\n";
            break;
        }

        switch(terninator)
        {
        case '1':
            std::cout << "call  a.payingCar();\n";
            break;
        case '2':
            std::cout << "call a.nopayCar();\n";
            break;
        default:
            std::cout << "Incorrect symbol!\n";
            break;
        }

        std::cin.ignore();
    }

    return 0;
}


Полагаю, что смысл ясен. Все остальное сможете поменять под себя.

Это сообщение отредактировал(а) JЕT - 15.7.2011, 09:01
PM MAIL   Вверх
xvr
Дата 15.7.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(0761 @  14.7.2011,  11:03 Найти цитируемый пост)
Задача, по-моему, ясна.

Угу
Цитата(0761 @  14.7.2011,  11:03 Найти цитируемый пост)
Пробовал с другими управляющими последовательностями, результата никакого.
Тут виноваты не управляющие последовательности, а особенности устройства консоли в ОС (как в Win там и в Linux)
Консоль буферизует пользовательский ввод и отдает программе уже полностью введенную пользователем строку. До тех пор, пока пользователь не нажал Enter, в программу ничего не попадает.
А после этого, попадает уже вся строка целиком, именно ее cin и будет читать посимвольно.

Вам нужен или неблокирующий ввод (типа getch) или перевести консоль в небуферезованный режим (процесс целиком зависит от ОС)


PM MAIL   Вверх
0761
Дата 15.7.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



JЕT, тоже по Лафоре практиковались? smile

xvr, да, смысл уловил. спасибо большое
PM MAIL   Вверх
JЕT
Дата 15.7.2011, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 30.9.2010

Репутация: нет
Всего: нет



Цитата

JЕT, тоже по Лафоре практиковались? smile

Нет, по Дейтелу.

Добавлено через 7 минут и 27 секунд
К стати _getch() не самое лучшее решение, поскольку будет работать только под win. Так что я не нашел варианта лучше, чем показал в посте №2.
PM MAIL   Вверх
xvr
Дата 16.7.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(JЕT @  15.7.2011,  22:54 Найти цитируемый пост)
К стати _getch() не самое лучшее решение, поскольку будет работать только под win.

А вот getch() будет работать везде. Правда в Linux это функция из curses, т.е. понадобится инициализация. Вот


PM MAIL   Вверх
boostcoder
Дата 16.7.2011, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(xvr @  16.7.2011,  09:04 Найти цитируемый пост)
Правда в Linux это функция из curses

не за чем ради одной функции привязываться к ncurses.

в линуксах юзаю это:
Код

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <sys/ioctl.h>
 
struct TerminalOpt {
        TerminalOpt() {
                termios new_settings;
                tcgetattr(0,&stored_settings);
                new_settings = stored_settings;
                new_settings.c_lflag &= (~ICANON);
                new_settings.c_cc[VTIME] = 0;
                new_settings.c_cc[VMIN] = 1;
                tcsetattr(0,TCSANOW,&new_settings);
        }
        ~TerminalOpt() {
                tcsetattr(0,TCSANOW,&stored_settings);
        }
        termios stored_settings;
};
 
int main() {
   {  TerminalOpt term;
      for ( char ch = 0; (ch=getc(stdin)) != 'q'; ) {
         fprintf(stdout, "pressed \"%c\"", ch);
      }
   }

   fprintf(stdout, "pressed \"%c\"", (char)getc(stdin));
 
   return 0;
}

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.