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

как проверить нажатие "Enter" - C++

Восстановить пароль Регистрация
 
danghyan
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 19
18.02.2014, 15:13     как проверить нажатие "Enter" #1
Пользователь вводит поочередно значения какие то, хочу что бы при нажатии "Enter" цикл вырубался и программа работала дальше.
Получить VK_RETURN через windows.h не получится, тк пишу на xcode(mac). как подключить библиотеку не нашел, да и думаю есть способы полегче.
getchar не получается, тк пользователь может ввести ansii значение этого символа цифрами и программа остановится(как я понимаю). Как быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
18.02.2014, 15:22     как проверить нажатие "Enter" #2
А как ты вообще читаешь значения?
Посимвольно?
Тогда просто
C++
1
2
char c = ' ';
while(c != 13){...}
Если читаешь строками, то для ввода их надо нажимать enter в любом случае.
И таки, интересно мне, как можно набрав "13", заставить программу случайно понять это как символ ввода, если подобное поведение не является частью обработки ввода?
danghyan
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 19
18.02.2014, 15:31  [ТС]     как проверить нажатие "Enter" #3
Цитата Сообщение от Бендерродригез Посмотреть сообщение
А как ты вообще читаешь значения?
Посимвольно?
Тогда просто
C++
1
2
char c = ' ';
while(c != 13){...}
Если читаешь строками, то для ввода их надо нажимать enter в любом случае.
И таки, интересно мне, как можно набрав "13", заставить программу случайно понять это как символ ввода, если подобное поведение не является частью обработки ввода?
Нет не строками, все значения интовые.

C++
1
2
3
4
...
c=getchar()
if(c==13)
...
Если пользователь собирается вводить 13 в программу или если он нажмет "Enter"... Ведь в любом случае с=13 и выполняется if, не так ли?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
18.02.2014, 15:57     как проверить нажатие "Enter" #4
Цитата Сообщение от danghyan Посмотреть сообщение
не так ли?
Неа. В char влезает только один символ. Пользователь вводит 13 - а это два символа. Следовательно в переменную запишется только первый, то есть единица. А ASCII код единицы 49.
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
18.02.2014, 15:58     как проверить нажатие "Enter" #5
Цитата Сообщение от danghyan Посмотреть сообщение
Нет не строками, все значения интовые.

C++
1
2
3
4
...
c=getchar()
if(c==13)
...
Если пользователь собирается вводить 13 в программу или если он нажмет "Enter"... Ведь в любом случае с=13 и выполняется if, не так ли?
getchar читает один символ. Если пользователь введёт "13", то считается только '1', то бишь (int)49. '3' останется в потоке.
Если он нажмёт enter, то и получишь (int)13.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
18.02.2014, 16:16     как проверить нажатие "Enter" #6
Вот, кстати, от Юры хороший пример: Стрелки клавиатуры в консоли.
danghyan
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 19
18.02.2014, 17:32  [ТС]     как проверить нажатие "Enter" #7
Цитата Сообщение от Бендерродригез Посмотреть сообщение
getchar читает один символ. Если пользователь введёт "13", то считается только '1', то бишь (int)49. '3' останется в потоке.
Если он нажмёт enter, то и получишь (int)13.
Сделал через getchar, но для ввода значения мне все равно приходится нажимать энтр, в потоке остается и код энтнра. Программа делает 2 шага и цикл вырубается от кода энтра в потоке.

Добавлено через 23 секунды
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вот, кстати, от Юры хороший пример: Стрелки клавиатуры в консоли.
это штука работает только на винде, у меня мак.
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
18.02.2014, 17:42     как проверить нажатие "Enter" #8
Цитата Сообщение от danghyan Посмотреть сообщение
Сделал через getchar, но для ввода значения мне все равно приходится нажимать энтр, в потоке остается и код энтнра. Программа делает 2 шага и цикл вырубается от кода энтра в потоке.
Используй getch, она считывает символ сразу при нажатии клавиши, энтер для ввода не нужен.
danghyan
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 19
18.02.2014, 18:07  [ТС]     как проверить нажатие "Enter" #9
Цитата Сообщение от Бендерродригез Посмотреть сообщение
Используй getch, она считывает символ сразу при нажатии клавиши, энтер для ввода не нужен.
на маке нету его, но поискал и нашел замену cin.get и то не помогло... в итоге нашел самый просто способ в лоб очистить поток через:
cin.ignore(numeric_limits<streamsize>::max(), '\n');

Теперь вопрос как получить из ansii кода сам символ? (из 49 например 1). Как то очень плохо получилось реализовать но все это конечно, но рас уж начал...

PS:Спасибо вроде бы получается что то.
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
18.02.2014, 18:26     как проверить нажатие "Enter" #10
Цитата Сообщение от danghyan Посмотреть сообщение
на маке нету его, но поискал и нашел замену cin.get и то не помогло... в итоге нашел самый просто способ в лоб очистить поток через:
cin.ignore(numeric_limits<streamsize>::max(), '\n');

Теперь вопрос как получить из ansii кода сам символ? (из 49 например 1). Как то очень плохо получилось реализовать но все это конечно, но рас уж начал...

PS:Спасибо вроде бы получается что то.
С маком не знаком, аналог getch, если он есть, не знаю.

Если ты чистишь поток после того, как прочитал первый символ, то как получишь оставшиеся?

C++
1
2
int i;
i = cin.get() - '0';  // код нуля равен 48.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 18:45     как проверить нажатие "Enter"
Еще ссылки по теме:

Выполнять "пока" не нажат Enter C++
C++ Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b"
Решить пример, в котором цифры заменены буквами: "enter + enter = абзац" C++

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

Или воспользуйтесь поиском по форуму:
danghyan
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 19
18.02.2014, 18:45  [ТС]     как проверить нажатие "Enter" #11
Цитата Сообщение от Бендерродригез Посмотреть сообщение
С маком не знаком, аналог getch, если он есть, не знаю.

Если ты чистишь поток после того, как прочитал первый символ, то как получишь оставшиеся?

C++
1
2
int i;
i = cin.get() - '0';  // код нуля равен 48.
через цикл. каждый ход цикла - одно значение. Беру из потока свою цифру, оставшееся чищу, потом снова ввод - беру свою цифру - чищу.

C++
1
2
3
4
5
6
7
8
  while(b!=10){
        int b=cin.get();
        if(b==10){
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            break;}
        Creat(b, &le);
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
вот мой мягко говоря некрасивый цикл. Выглядит тоже неочень, но в принципе работает. Минус только 1 - то что в b кидаются не сами символы(цифры в данном случае), а их ansii коды...

PS: 10 - это энтер. на маке почему то так, знаю что по стандарту 13, но тут 10... если честно не вникал.
Yandex
Объявления
18.02.2014, 18:45     как проверить нажатие "Enter"
Ответ Создать тему
Опции темы

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