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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

Не работает getch() - C++

27.09.2012, 14:21. Просмотров 2422. Ответов 17
Метки нет (Все метки)

не работает задержка по 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
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdio>
#include <unistd.h>
 
using namespace std;
 
void play_game(int magic_number, int ranMax);
int get_magic_number(int ranMax);
int set_complexity();
 
int main()
{
    unsigned short int option;
    unsigned int ranMax = set_complexity();
    unsigned int magic_number = get_magic_number(ranMax);
 
    do {
        //system("clear");
        do {
            cout << "Выберите пункт меню (1 - 4)\n\n";
            cout << "1 - Генерировать число\n";
            cout << "2 - Начать игру\n";
            cout << "3 - Выбрать сложность\n";
            cout << "4 - Выход\n\n";
            cout << "--> ";
            cin >> option;
        } while((option < 1) && (option > 4));
 
        switch(option) {
            case 1:
                magic_number = get_magic_number(ranMax);
                break;
            case 2:
                play_game(magic_number, ranMax);
                break;
            case 3:
                ranMax  = set_complexity();
                magic_number = get_magic_number(ranMax);
        }
    } while(option != 4);
 
    return 0;
}
 
int get_magic_number(int ranMax) //генерация числа
{
    unsigned int magic_number;
    srand(time(NULL));
    magic_number = 1 + rand() % ranMax;
    cout << "Новое число успешно генерировано!\n";
    sleep(1);
    return magic_number;
}
 
void play_game(int magic_number, int ranMax)  //игра
{
    int guess;
    unsigned int count;
 
    system("clear");   //   выставить clear для linux и clr для windows
    cout << "Компьютер загадал число от 1 до " << ranMax << ".\n";
    cout << "Угадайте его за минимальное количество попыток\n\n";
    do {
        cout << "Ваше число --> ";
        cin >> guess;
        count++;
 
        if (guess > ranMax) {
            cout << "Идиот! Нужно вводить числа от 1 до " << ranMax << "!\n\n";
            continue;
        }
 
        if (guess < magic_number)
            cout << "Загаданное число больше\n\n";
        else if (guess > magic_number)
            cout << "Загаданное число меньше\n\n";
    } while (guess != magic_number);
    cout << "Правильно! Загаданное число действительно равно " << magic_number << "!\n";
    cout << "Вы угадали число за " << count << " попыток.";
    cout << "Нажмите любую клавишу для продолжения...\n";
    char c = getchar();
}
 
int set_complexity()    //выбор сложность
{
    unsigned short int option;
    unsigned int ranMax;
 
    do {
        cout << "Выберите сложность\n\n";
        cout << "1 - Новичек (число не превышает 100)\n";
        cout << "2 - Задрот (число до 1000)\n";
        cout << "3 - Только хардкор!!! (over 1000)\n\n";
        cout << "--> ";
        cin >> option;
    } while((option < 1) && (option > 3));
 
    switch(option) {
        case 1:
            ranMax = 100;
            break;
        case 2:
            ranMax = 1000;
            break;
        case 3:
            ranMax = 10000;
    }
    cout << "Сложность установлена!\n";
    sleep(1);
    return ranMax;
}
84 строка
собственно задержки не происходит.
а вот так все происходит
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdio>
using namespace std;
 
int main()
{
   cout << "Нажмите кнопку для завершения программы";
   char c = getchar();
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 14:21     Не работает getch()
Посмотрите здесь:

Не работает getch() - C++
Здравствуйте, решил написать первую серьезную программу ,в данном случае змейку, не получается ввести нажатие клавиши с клавиатуры.После...

не работает ни _getch(), ни getch() - C++
собственно проблема: из консоли невозможно считать клавиши: Esc, Insert, Delete ....... и самое главное не читаются стрелки... считывает...

Ожидание клавиши Enter - getch не работает - C++
Друзья привет! Спасибо всем, кто откликнется! Мелкий вопрос, но честно, уже голова кругом идет! Второй день бьюсь над совершенно...

Как работает функция getch() и какая библиотека нужна? - C++
Ребят подскажите пожалуйста в C++ как работает функция getch() и какая библиотека нужна ?

Программа не работает когда пишу "getch()", исправьте ошибки - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; using namespace std; int count(string a, int i); int main() { ...

аналог getch() - C++
Ребят getch меня не устраивает следующим: когда окно теряет фокус он не работает. как выйти из ситуации?

getch и коды - C++
здравствуйте господа програмисты!как сделать что бы при нажатии клавиши &quot;w&quot; выскакивало надпись привет народ,но только при нажатии именно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
27.09.2012, 14:23     Не работает getch() #2
Заменить это:
C++
1
2
 cout << "Нажмите кнопку для завершения программы";
   char c = getchar();
На это:
C++
1
system("pause");
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,117
27.09.2012, 14:24     Не работает getch() #3
В потоке ввода есть символы, вероятно, там перенос.
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
27.09.2012, 17:26  [ТС]     Не работает getch() #4
C++
1
system("pause");
забыл сказать что пишу под linux, тут такое не прокатит

Цитата Сообщение от NoMasters Посмотреть сообщение
В потоке ввода есть символы, вероятно, там перенос.
можно поподробнее?

Добавлено через 2 часа 57 минут
гуглил на счет потока и напоролся на fflush.
попробовал сделать
C++
1
2
3
......
fflush(stdin); fflush(stdout);
char c = getchar();
результат нулевой, жду других идей
или мб есть другие способы приоотановки программы до нажатия клавиши, которые работают в linux?
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
27.09.2012, 17:39     Не работает getch() #5
поставь std::cin.clear(); std::cin.get().get();
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 17:45     Не работает getch() #6
C++
1
2
cin.clear(); // на случай ошибки ввода.
while (cin.get() != '\n'); // удаление символов, оставшихся в потоке.
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
27.09.2012, 17:51  [ТС]     Не работает getch() #7
не помогло. причем все вышеперечисленные способы исправно работают вне данной программы, т.е. создаю "hello world" и добавляю туда char c = getchar() или std::cin.clear(); std::cin.get() и все приостанавливается как положено, но вот в моей программе почему то нет

Добавлено через 4 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
cin.clear(); // на случай ошибки ввода.
while (cin.get() != '\n'); // удаление символов, оставшихся в потоке.
это к сожалению тоже не помогло
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 18:03     Не работает getch() #8
И в 61 строке инициализируйте count нулём.

Добавлено через 39 секунд
Цитата Сообщение от [WRG
;3494380]это к сожалению тоже не помогло
Быть не может. Код покажите, как делаете.

Добавлено через 1 минуту
Остановки нет, а что происходит?

Добавлено через 1 минуту
Проблема может не в остановке.

Добавлено через 6 минут
В линукс только cin.sync() не работает, остальное должно работать. Может проблема в неинициализированном count? У меня ошибка времени выполнения выскакивала.
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
27.09.2012, 18:07     Не работает getch() #9
На скоко мне помнится, для getch(); нужено подключить conio.h
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 18:25     Не работает getch() #10
Если сделать в 61:
C++
1
unsigned int count = 0;
остановка и в вашем коде нормально работает.
Цитата Сообщение от cactus09 Посмотреть сообщение
На скоко мне помнится, для getch(); нужено подключить conio.h
Тогда бы компилятор ругался. И здесь не getch(), а getchar().
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
27.09.2012, 18:45  [ТС]     Не работает getch() #11
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
115
116
117
118
119
120
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdio>
#include <unistd.h>
 
using namespace std;
 
void play_game(int magic_number, int ranMax);
int get_magic_number(int ranMax);
int set_complexity();
 
int main()
{
    unsigned short int option;
    unsigned int ranMax = set_complexity();
    unsigned int magic_number = get_magic_number(ranMax);
 
    do {
        //system("clear");
        do {
            cout << "Выберите пункт меню (1 - 4)\n\n";
            cout << "1 - Генерировать число\n";
            cout << "2 - Начать игру\n";
            cout << "3 - Выбрать сложность\n";
            cout << "4 - Выход\n\n";
            cout << "--> ";
            cin >> option;
        } while((option < 1) && (option > 4));
 
        switch(option) {
            case 1:
                magic_number = get_magic_number(ranMax);
                break;
            case 2:
                play_game(magic_number, ranMax);
                break;
            case 3:
                ranMax  = set_complexity();
                magic_number = get_magic_number(ranMax);
        }
    } while(option != 4);
 
    return 0;
}
 
int get_magic_number(int ranMax) //генерация числа
{
    unsigned int magic_number;
    srand(time(NULL));
    magic_number = 1 + rand() % ranMax;
    cout << "Новое число успешно генерировано!\n";
    sleep(1);
    return magic_number;
}
 
void play_game(int magic_number, int ranMax)  //игра
{
    int guess;
    unsigned int count = 0;
 
    system("clear");   //   выставить clear для linux и clr для windows
    cout << "Компьютер загадал число от 1 до " << ranMax << ".\n";
    cout << "Угадайте его за минимальное количество попыток\n\n";
    do {
        cout << "Ваше число --> ";
        cin >> guess;
        count = count + 1;
 
        if (guess > ranMax) {
            cout << "Идиот! Нужно вводить числа от 1 до " << ranMax << "!\n\n";
            continue;
        }
 
        if (guess < magic_number)
            cout << "Загаданное число больше\n\n";
        else if (guess > magic_number)
            cout << "Загаданное число меньше\n\n";
    } while (guess != magic_number);
    cout << "Правильно! Загаданное число действительно равно " << magic_number << "!\n";
    cout << "Вы угадали число за " << count << " попыток.";
    cout << "Нажмите любую клавишу для продолжения...";
    //flush(); //flush();
    getchar();
 
    //cin.clear(); cin.get();
 
//    cin.clear(); // на случай ошибки ввода.
//    while (cin.get() != '\n');  // удаление символов, оставшихся в потоке
}
 
int set_complexity()    //выбор сложность
{
    unsigned short int option;
    unsigned int ranMax;
 
    do {
        cout << "Выберите сложность\n\n";
        cout << "1 - Новичек (число не превышает 100)\n";
        cout << "2 - Задрот (число до 1000)\n";
        cout << "3 - Только хардкор!!! (over 1000)\n\n";
        cout << "--> ";
        cin >> option;
    } while((option < 1) && (option > 3));
 
    switch(option) {
        case 1:
            ranMax = 100;
            break;
        case 2:
            ranMax = 1000;
            break;
        case 3:
            ranMax = 10000;
    }
    cout << "Сложность установлена!\n";
    sleep(1);
 
    return ranMax;
}
вот, по прежнему не фурычит
делаю все в codeblocks, пробовал также из консольки компилить, эффекта ноль

Добавлено через 2 минуты
остановки нет, программа работает так, словно и нету там getch()
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 19:53     Не работает getch() #12
Конструкцию для очистки потока нужно перед getchar() ставить, а не после. Вот этот код нормально работает (sleep() убрано и #include <unistd.h>):
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
115
116
117
118
119
120
121
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cstdio>
//#include <unistd.h>
 
using namespace std;
 
void play_game(int magic_number, int ranMax);
int get_magic_number(int ranMax);
int set_complexity();
 
int main()
{
    setlocale(0, "");
    
    unsigned short int option;
    unsigned int ranMax = set_complexity();
    unsigned int magic_number = get_magic_number(ranMax);
 
    do {
        //system("clear");
        do {
            cout << "Выберите пункт меню (1 - 4)\n\n";
            cout << "1 - Генерировать число\n";
            cout << "2 - Начать игру\n";
            cout << "3 - Выбрать сложность\n";
            cout << "4 - Выход\n\n";
            cout << "--> ";
            cin >> option;
        } while((option < 1) && (option > 4));
 
        switch(option) {
            case 1:
                magic_number = get_magic_number(ranMax);
                break;
            case 2:
                play_game(magic_number, ranMax);
                break;
            case 3:
                ranMax  = set_complexity();
                magic_number = get_magic_number(ranMax);
        }
    } while(option != 4);
 
    return 0;
}
 
int get_magic_number(int ranMax) //генерация числа
{
    unsigned int magic_number;
    srand(time(NULL));
    magic_number = 1 + rand() % ranMax;
    cout << "Новое число успешно генерировано!\n";
   // sleep(1);
    return magic_number;
}
 
void play_game(int magic_number, int ranMax)  //игра
{
    int guess;
    unsigned int count = 0;
 
    //system("clear");   //   выставить clear для linux и clr для windows
    cout << "Компьютер загадал число от 1 до " << ranMax << ".\n";
    cout << "Угадайте его за минимальное количество попыток\n\n";
    do {
        cout << "Ваше число --> ";
        cin >> guess;
        count = count + 1;
 
        if (guess > ranMax) {
            cout << "Идиот! Нужно вводить числа от 1 до " << ranMax << "!\n\n";
            continue;
        }
 
        if (guess < magic_number)
            cout << "Загаданное число больше\n\n";
        else if (guess > magic_number)
            cout << "Загаданное число меньше\n\n";
    } while (guess != magic_number);
    cout << "Правильно! Загаданное число действительно равно " << magic_number << "!\n";
    cout << "Вы угадали число за " << count << " попыток.";
    cout << "Нажмите любую клавишу для продолжения...";
    
    cin.clear(); // на случай ошибки ввода.
    while (cin.get() != '\n');  // удаление символов, оставшихся в потоке
    
    getchar();
 
}
 
int set_complexity()    //выбор сложность
{
    unsigned short int option;
    unsigned int ranMax;
 
    do {
        cout << "Выберите сложность\n\n";
        cout << "1 - Новичек (число не превышает 100)\n";
        cout << "2 - Задрот (число до 1000)\n";
        cout << "3 - Только хардкор!!! (over 1000)\n\n";
        cout << "--> ";
        cin >> option;
    } while((option < 1) && (option > 3));
 
    switch(option) {
        case 1:
            ranMax = 100;
            break;
        case 2:
            ranMax = 1000;
            break;
        case 3:
            ranMax = 10000;
    }
    cout << "Сложность установлена!\n";
    //sleep(1);
 
    return ranMax;
}
Миниатюры
Не работает getch()  
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
27.09.2012, 20:11  [ТС]     Не работает getch() #13
благодарствую, затупил, ошибку не заметил
можете объяснить как это работает?
C++
1
2
    cin.clear();
    while (cin.get() != '\n');
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 20:21     Не работает getch() #14
C++
1
2
3
4
cin.clear(); // сброс флага ошибки потока ввода.
while (cin.get() != '\n'); // cin.get() будет извлекать символы из потока
                           // пока не извлечёт '\n'(вставляется в поток при нажатии Enter, 
                           // остался в потоке от предшествующего cin >> guess;)
После этого поток ввода будет чист.
В данном случае должен сработать и просто:
C++
1
2
cin.get();
getchar();
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
27.09.2012, 20:28  [ТС]     Не работает getch() #15
еще раз благодарю, теперь понятно
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 20:35     Не работает getch() #16
Проскакивание ожидания ввода (паузы) происходит из-за того, что в потоке ввода, после предшествующего ввода, остаются символы. Чаще всего, остаётся символ новой строки '\n', который попадает в поток при нажатии Enter. cin >> его просто игнорирует, а такие функции, как getchar(), cin.get() и пр. считывют его, как первый символ в потоке и код идёт дальше. Ожидания ввода символа не происходит. Поэтому, перед применением этих функций поток нужно очищать.
Cad1L
4 / 4 / 0
Регистрация: 25.09.2012
Сообщений: 70
27.09.2012, 20:49     Не работает getch() #17
компилятор ругается на
C++
1
sleep(1);
что это может быть.
Работаю в dev c++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2012, 20:56     Не работает getch()
Еще ссылки по теме:

getch() error - C++
Привет всем, такое дело, не работает getch()! Вот, что пишет: C:\Users\AKHURS\Desktop\tetris_start.cpp:122: implicit declaration...

Функция getch() - C++
Здравствуйте! Проблема следующая: в программе для получения значений от пользователя я использовал функцию getch(), вызов этой функции в...

getch(), char *name; - C++
Привет всем, у меня опять вопрос, задается тип данных например char name; это понятно но для чего там ставится знак * char* name; И...

Замена getch() - C++
Здравствуйте. Решил повысить переносимость своего кода и задался вопросом: на что заменить getch? Насколько я понимаю, эта функция...

getch и TCHAR - C++
Встала следующая задача : 1) Недопустить ввод кол-ва символов &gt; 10 2) Заменить все символы на * (пароль) Всё это прекрасно...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2012, 20:56     Не работает getch() #18
Скорее всего, это не для Windows.
Yandex
Объявления
27.09.2012, 20:56     Не работает getch()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru