С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302

Переназначить событие клавиши ENTER в консоли

20.09.2013, 13:15. Показов 4798. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
У меня есть массив, мне его нужно заполнить числами с клавиатуры. Но этот массив должен заполняться в строчку, а не в столбец.

т.е., когда мы вводим число и нажимаем ENTER, то выходит так:

1
2
3
4
5
...
а нужно, чтобы заполнение шло так:

1 2 3 4 5 ...
при этом, числа отделяются пробелом.


Как сделать такой ввод?

Есть вариант "проще", это использовать строку string или char, потом запустить кучу циклов для считывания и забивания в ДИНАМИЧЕСКИЙ массив.
Есть вариант: изменить событие клавиши на время, т.е., при нажатии ENTER'а мы будем делать пробел. а не вниз -- но такой вариант мне кажется запредельным.
Есть вариант: изменить событие того же энтера, т.е., ввод происходит, а переход на след. строчку нет. Пробел осуществить через cout.

Всё, на этом мои идеи закончились. Что и как сделать? Мне достаточно любого простейшего примера.

Шаблон:


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
#include "stdafx.h"
#include "L1.h"
#include <time.h> 
#include <iostream>
#include <Windows.h>
#include <map>
#include <string>
 
using namespace std;
//пробел VK_SPACE
//Enter VK_RETURN
int main()
{
    int t,i;
    setlocale(0,"");
        cin >> t;
    int *mas = new int[t];
        
        for (i=0; i<t; i++)
{
//заполнение массива в строчку
 
}
 
    cin.get();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2013, 13:15
Ответы с готовыми решениями:

Событие при нажатии клавиши Enter
Как создать событие которое активируется при нажатии клавиши Enter? Или любой другой?

Как переназначить клавиши на клавиатуре?
Кнопка р(h) плохо нажимается. Хочу, чтобы вместо неё пользоваться Caplock. Установил пока что Linux Mint на флэшку, возможно поменяю через...

Как переназначить клавиши на клавиатуре?
У меня на ноутбуке повысить и снизить громкость F7 и F8, почему то в место F8 работает F9 как переназначить?

18
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
20.09.2013, 13:23
C++
1
2
3
4
int *mas = new int[t];
 
for (i=0; i<t; i++)
    cin >> mas[i];  // можно вводить числа через пробел, можно после каждого числа нажимать Enter. результат будет одинаковым
1
 Аватар для Cynacyn
35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
20.09.2013, 13:25
вам нужно вывести массив в строку разделённую пробелами?
C++
1
2
3
4
5
6
7
8
9
10
11
// заполняем
int n;
for(int i=0; i<t; i++) {
   cin>>n;
   mas[i] = n;
}
// выводим
for(int i=0; i<t; i++) {
   cout << mas[i];
   if(i<t-1) cout << " "; // не выводим пробел после последнего символа
}
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
20.09.2013, 13:33  [ТС]
хм, хорошо, а если вдруг нажмут энтр -- как изменить событие клавиши?

*дааааа, проверила, всё работает, кошмар как всё просто)))

Добавлено через 3 минуты
Цитата Сообщение от Cynacyn Посмотреть сообщение
вам нужно вывести массив в строку разделённую пробелами?
нет-нет, вывод я и так знаю.

тут такое дело:

заполняем массив целыми числами через пробел
и, как я посмотрела, если делать:

C++
1
2
for (i=0; i<t; i++)
    cin >> mas[i];
и нажимать "пробел", то мы сначала введём числа при i=0, а потом нажмём enter и остальные i досчитает, заполняя массив.

А вдруг нажимать будут enter?
Как тогда изменить "событие" даже простым:

если нажали энтр, то использовали пробел
но делать это так:


C++
1
2
3
4
5
for (i=0; i<t; i++)
{
    cin >> mas[i]; 
если нажали энтр, то использовать пробел
}
0
 Аватар для Cynacyn
35 / 35 / 7
Регистрация: 02.05.2013
Сообщений: 109
20.09.2013, 13:42
Цитата Сообщение от Nullik Посмотреть сообщение
хм, хорошо, а если вдруг нажмут энтр -- как изменить событие клавиши?

*дааааа, проверила, всё работает, кошмар как всё просто)))

Добавлено через 3 минуты


нет-нет, вывод я и так знаю.

тут такое дело:



и, как я посмотрела, если делать:

C++
1
2
for (i=0; i<t; i++)
    cin >> mas[i];
и нажимать "пробел", то мы сначала введём числа при i=0, а потом нажмём enter и остальные i досчитает, заполняя массив.

А вдруг нажимать будут enter?
Как тогда изменить "событие" даже простым:



но делать это так:


C++
1
2
3
4
5
for (i=0; i<t; i++)
{
    cin >> mas[i]; 
если нажали энтр, то использовать пробел
}

Попробуйте создать новую тему, с заглавием типа: "Переназначить значение клавиши в программе", я погуглил, но ничего не нашел.
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
20.09.2013, 13:48
Цитата Сообщение от Nullik Посмотреть сообщение
C++
1
2
3
4
5
for (i=0; i<t; i++) 
{ 
   cin >> mas[i]; 
   если нажали энтр, то использовать пробел 
}
я понял что надо сделать, но не знаю как
после cin >> mas[i] и нажатия энтр, курсор сразу же перемещается на начало новой строки
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
20.09.2013, 15:50  [ТС]
https://www.cyberforum.ru/cpp-... 58497.html -- "задание".

Добрый день.

Ещё раз напомню:
нужно заполнить массив целыми числами через пробел.

Был вариант "сделать строчку а потом её обрабатывать", но это путь ленивых программистов

поэтому, остановилась на такой мысли:

если делать:
C++
1
2
for (i=0; i<t; i++)
    cin >> mas[i];
и нажимать "пробел", то мы сначала введём числа при i=0, а потом нажмём enter и остальные i досчитает, заполняя массив.

А вдруг нажимать будут enter?
Как тогда изменить "событие" даже простым:
C++
1
2
3
4
5
for (i=0; i<t; i++)
{
    cin >> mas[i]; 
если нажали энтр, то использовать пробел
}
У клавиши ENTER есть такая проблема, что это ВВОД инфы, но так же и перевод на др строчку. А сделать бы так, чтобы был не ввод, а хотя бы пробел НА ВРЕМЯ РАБОТЫ ЦИКЛА, а если и не заменять полностью на пробел, то как заменить функцию "перевода на др. строчку" на "отступ\пробел" или вообще отключить перевод на др. строчку?


Шаблон программы:

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
#include "stdafx.h"
#include "L1.h"
#include <time.h> 
#include <iostream>
#include <Windows.h>
#include <map>
#include <string>
 
using namespace std;
//пробел VK_SPACE
//Enter VK_RETURN
int main()
{
    int t,i;
    setlocale(0,"");
        cin >> t;
    int *mas = new int[t];
        
        for (i=0; i<t; i++)
{
//заполнение массива в строчку
 
}
 
    cin.get();
    return 0;
}
Добавлено через 39 минут
upp
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 16:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    
#include <conio.h>
...
    char str[15];
    int i = 0;
    while (true)
    {
        str[i] = getch();
        if (str[i] == 10 || str[i] == 13) str[i] = ' ';
        if (str[i] == 27) break; // выход из ввода при нажатии Escape
        cout << str[i];
        ++i;
    }
    str[i] = '\0';
    cout << endl << str << endl;
1
 Аватар для es_
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
20.09.2013, 16:15
Вот как вариант. Выглядеть будет так как вы хотите
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
38
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string>
 
using namespace std;
 
int main()
{
    string s;
    int const n=5;
    int mas[n],i,j;
    char ch;
    s="Введите числа:\n";
    setlocale(LC_ALL,"Russian");
    cout<<s;
    for(i=0;i<n;i++)
    {
        cin>>mas[i];
        ch = cin.get();
        if(ch=='\n') 
        {
            system("cls");
            cout<<s;
            for(j=0;j<=i;j++)
            {
                cout<<mas[j]<<" ";
            }
        }
    }
    cout<<"\nМассив: ";
    for(i=0;i<n;i++)
    {
        cout<<mas[i]<<" ";
    }
    system("PAUSE > void");
    return 0;
}
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
20.09.2013, 19:28  [ТС]
alsav22, у меня динамический массив, получается, тогда здесь в переменную char-массив делать тоже динамическим.
*так, надо поразмыслить над кодом.

Добавлено через 2 минуты
es_, ничего себе, какой у вас там замут
*если энтр, то удаляем, перезаписываем, а это не слишком будет грузить прогу, когда, например, будет 1 000 000 элементов для работы с массивом?

А вообще, классная идея))

Добавлено через 3 часа 7 минут
ещё варинт: а можно как-то на время ввода массива отключить ENTER ?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 20:00
Цитата Сообщение от Nullik Посмотреть сообщение
ещё варинт:
Чем не устраивают предложенные?
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
20.09.2013, 20:39  [ТС]
alsav22, у вас в вариант неплохо, но вводим строку, строка динамическая получается или как -- потому что у меня нет изначального размера и лишнего не надо. (преподы вредные, а что делать?)

В другом варианте много переудалять и записывать -- массив на 1 000 000 элементов что будет делать? -- это не слишком рационально, я считаю. Хотя, разве там так много делается операций и не так быстро... Не забываем про вредных преподов.

Я ещё раз подумала над отключением клавиши или изменения свойств, но пришла к выводу, что там есть некоторые проблемы в плане "если выйдет за границу". Потом я сделала вектор, который нужный и вредный, но и он не совсем то.

В итоге получила: быть мне ленивым программистом и перебрать строчку и забить её в вектор.

*ну или есть ещё варианты, но либо я не вижу и не понимаю их, либо мне не подскажут, либо мистический третий вариант.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2013, 14:19
Цитата Сообщение от Nullik Посмотреть сообщение
но вводим строку, строка динамическая получается или как -- потому что у меня нет изначального размера и лишнего не надо.
В чём проблема, не пойму? В какой тип вводите? В string? В динамический массив?

Добавлено через 6 минут
Вот для string:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    string str;
    
    while (true)
    {
        str.push_back(getch());
        int i = str.size();
        if (str[i - 1] == 10 || str[i - 1] == 13) str[i - 1] = ' ';
        if (str[i - 1] == 27) break; // выход из ввода при нажатии Escape
        cout << str[i - 1];
        
    }
    str.erase(str.size() - 1);
    cout << endl << str << endl;
Добавлено через 17 часов 16 минут

Не по теме:

Безответные посты наводят на размышления...

0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
21.09.2013, 16:30  [ТС]
alsav22, а на что отвечать?

Сегодня выяснила ещё один замечательный факт -- теперь преподу нужна целая командная строчка))) командную строчку мы пишем.

чтобы было так:

>> iterations 10000
у меня правда такой вопрос: вот если использовать "ключевое слово", а потом постаивть пробел и вот... там или надо getline и проверять всю строчку или ещё какой ужос надо выдумывать, но тут надо ещё подумать.

А о чём мне вам ответить? Препод очень удивляется, что мы используем строковые переменные. "Мол, можно ведь ещё как-то то" -- читаем его мысли. То ли он от нас WinAPI хочет, то ли ещё какие знания, но мне не совсем понятно.

теперь я ищу "как делали командную строку", чтобы понять что от меня хотят.

А что мне вам ещё ответит? Да, у вас хороший код, но и это не совсем то, что мне надо. Теперь не совсем то. Или то. Надо сидеть и думать.
0
21.09.2013, 17:04

Не по теме:

Цитата Сообщение от Nullik Посмотреть сообщение
alsav22, а на что отвечать?
Хотя бы на это:
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём проблема, не пойму? В какой тип вводите? В string? В динамический массив?
Цитата Сообщение от Nullik Посмотреть сообщение
Надо сидеть и думать.
Кроме этого, хорошо бы и на вопросы отвечать, если хотите, чтобы с вами вообще имели дело.

0
21.09.2013, 20:10  [ТС]

Не по теме:

В чём проблема, не пойму? В какой тип вводите? В string? В динамический массив?
Надо сидеть и думать.
я отвечаю на вопросы. Если я в одной из тем вам не ответила - не смертельно. К совести не призывайте, ни к чему.

0
21.09.2013, 20:22

Не по теме:

Цитата Сообщение от Nullik Посмотреть сообщение
К совести не призывайте, ни к чему.
Уже понял.

0
3 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 8
25.09.2013, 14:15
1
2
3
4
5
6
7
8
9
10
11
12
13



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    string str;
    
    while (true)
    {
        str.push_back(getch());
        int i = str.size();
        if (str[i - 1] == 10 || str[i - 1] == 13) str[i - 1] = ' ';
        if (str[i - 1] == 27) break; // выход из ввода при нажатии Escape
        cout << str[i - 1];
        
    }
    str.erase(str.size() - 1);
    cout << endl << str << endl;
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
25.09.2013, 18:01  [ТС]
анюта123, и?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2013, 18:01
Помогаю со студенческими работами здесь

Переназначить клавиши на клавиатуре. Возможно?
Есть ли какая то возможность с помощью скрипта на VBScript переназначить клавиши на клавиатуре? Вот например, у меня не работает клавиша...

Как переназначить горячие клавиши в Xubuntu?
Всем привет! Сижу я вот сейчас на Xubuntu 14.04, и пытаюсь разобраться с переназначением команды, которая выполняется при нажатии кнопки...

Как переназначить координаты в консоли (Console.SetCursorPosition(x, y))
Здравствуйте! У меня тестовая мини игра. Не получается смайлик сбросить координаты с начальной позиции при нажатии New game и при нажатии...

Как при динамическом создании кнопки переназначить OnClick событие
Нужно при создании кнопки переназначить событие OnClick newbutton.OnClick:=MyOnClick Так, чтобы в процедуру MyOnClick передалась...

Клавиши F1-F12 в консоли, и работа с мышкой в консоли
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор мышки (и еще мне надо бы узнать нажатие...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru