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

Как сделать ввод без enter? - C++

Восстановить пароль Регистрация
 
LAKALA
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
23.03.2014, 01:31     Как сделать ввод без enter? #1
Есть готовый код. нужно чтобы на ввод маркера стояло ограничение. Идея:чтобы при вводе, сразу перепрыгивала на ввод искомого символа. getchar() не работает(( помогите. куда его нужно правильно поставить?
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
//структура с используемой строкой и маркером
struct String
{
    char symArray[20];
    char marker;
};
 
//поиск координаты вхождения символа в строку
void searchSym( unsigned int mode, int *result, const char &searchingSym, const String &str )
{
    result[0] = -1;                             //"устанавливаем значение не найдено"
    if( mode == 3 ) result[1] = -1;             //Будет изменяться, если символ найдется
    for( unsigned int i = 0, index = 0; i < 20; ++i )
    {
        if( str.symArray[i] == searchingSym )
        {
            result[ index++ ] = i;
            if( mode == 1 ) break;              //нашли координату левого вхождения
            else if( mode == 2 ) --index;       //в зависимости от режима переходим к требуемому элементу в массиве результатов
            else if( mode == 3 && index == 1 ) result[ index ] = i;
            else if( mode == 3 && index == 2) --index;
        }
        if( str.symArray[i] == str.marker ) break;//"попали" на маркер
    }
}
int main()
{
    setlocale(LC_ALL, "russian");
 
    int result[2], mode, q = 1;
    String str;
    char searchingSym;
 
    for(;;)
    {
        cout << "Введите строку"<< endl;
        cin >> str.symArray;
        while(1)
        {
            /*str.marker=getch();
            cout<<char(str.marker)<<"\n";*/
        cout << "Введите маркер"<<endl;
        str.marker=getchar();
        
        /*cin >> str.marker;*/
        bool take=false;
        for(int i=0; str.symArray[i] !='\0'; i++)
        {
            if(str.marker==str.symArray[i])
            {
                take=true;
                break;
            }
        }
        if(take)
        {
            break;
        }
        else
        { 
            cout<<"Неверный маркер."<<endl;
            fflush(stdin);
        }
        }
 
        cout << "Введите искомый символ"<< endl;
        cin >> searchingSym;
 
        cout << " Выберите желаемое действие" << endl;
        cout << " 1) Координаты левого вхождения в строку" << endl;
        cout << " 2) Координаты правого вхождения в строку"<< endl;
        cout << " 3) Координаты левого и правого вхождения в строку"<< endl;
        cin >> mode;
 
        searchSym(mode, result, searchingSym, str);
        //Вывод результата в зависимост от заданного режима
        if( mode == 1)
            {
                if (result[0] != -1 ) cout << " Координата :" <<result[0]<<endl;
                else cout <<"символ отсутствует в строке"<<endl;
            }
 
        if ( mode == 2)
            {
                if (result[0] != -1 ) cout << " Координата :" <<result[0]<<endl;
                else cout <<"символ отсутствует в строке"<<endl;
            }
        if ( mode == 3)
            {
 
                {
                    if (result[0] != -1 )
                    {
                        cout << " Левая координата :" <<result[0]<<endl;
                        if (result[0] != result[1])
                        {
                            if (result[1] != -1) cout << " Правая координата :" << result[1]<< endl;
                        }
                        else cout << " Правая координата :" << result[0]<< endl;
                    }
                    else cout <<"символ отсутствует в строке"<<endl;
            }
        //повтор
        cout <<"Выполнить еще раз? (1/0)"<< endl;
        cin >> q;
        if (q == 0) return 0;
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2014, 01:31     Как сделать ввод без enter?
Посмотрите здесь:

Ввод символов без нажатия Enter'а C++
C++ ввод цифры без нажатия Enter'a. использование _getch()
Ввод данных без нажатия Enter C++
C++ Ввод без ENTER
C++ Как сделать закрытие приложения по нажатию ENTER? (Java)
Ввод данных без нажатия «Enter» C++
C++ Как сделать, чтобы сочетание клавиш 'enter'+'space' выходили из консоли
C++ Как сделать ввод матрицы из файла без указания размера

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
23.03.2014, 02:04     Как сделать ввод без enter? #2
Можно использовать _getch() для захвата нажатия кнопки или же _getche() для того же самого плюс печать этого символа в консоль.
LAKALA
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 5
23.03.2014, 02:22  [ТС]     Как сделать ввод без enter? #3
Простите, и куда я должна его поставить. куда ни вставляла и до этого, ничего не выходит(
Yandex
Объявления
23.03.2014, 02:22     Как сделать ввод без enter?
Ответ Создать тему
Опции темы

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