Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20

клавиатурный тренажер

09.01.2017, 02:33. Показов 8757. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет,решил написать простенький клавиатурный тренажер

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream sos;
    int Level, ses = 0, i;
    const int buff = 100;
    char sus[100], sis[100];
    system("color 3");
    
 
    std::cout << "\t\tВыберите пункт:\n";
    std::cout << "1 - Начальный уровень;\n";
    std::cout << "2 - Средний уровень;\n";
    std::cout << "3 - Тяжелый уровень;\n";
    std::cout << "... ";
 
    cin >> Level;
 
    switch (Level) {
    case 1:
        sos.open("words.txt");
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin >> sis;
        for (i = 0; i <= 100; i++){
            if (sus[i] != sis[i])
            {
                ses++;
            }
            cout << ses;
            break;
        }
        break;
 
    case 2:
        sos.open("words.txt");
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin >> sis;
        for (i = 0; i <= 100; i++){
            if (sus[i] != sis[i])
            {
                ses++;
            }
            cout << ses;
            break;
        }
    case 3:
        sos.open("words.txt");
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin >> sis;
        break;
 
    default:
        cout << "\nERROR! Invalid value!";
        exit(1);
    }
 
    cout << "\nPress "space" to clear screen";
    getch();
    system("cls");
 
 
    return 0;
}


в моем случае выводится на экран предложение,даже если ты сделал много ошибок,программа выводит 0,т.е ошибок нет,как сделать так,чтобы он нормально подсчитывал ошибки?вот никак понять не могу,подскажите пожалуйста

Добавлено через 10 минут
проблема в первом кейсе
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2017, 02:33
Ответы с готовыми решениями:

Клавиатурный тренажер на с++
Добрый,вечер всем! Люди добрые,помогите пожалуйста! Покажите пожалуйста простейший пример кода приложения &quot;Клавиатурный...

Написать клавиатурный тренажер
Всем доброго времени суток. Дали курсовой(( Составить программу обучения работе с клавиатурой. Программа должна выдавать на экран буквы,...

Клавиатурный тренажер Доработка
/*Разработка клавиатурного тренажера. Программа случайным образом выводит на экран символы,слоги,слова, которые нужно набирать на...

27
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 03:02
Во-первых:
Цитата Сообщение от kamaek777 Посмотреть сообщение
i <= 100;
Последний допустимый индекс 99, значит нужно просто < 100.
Во-вторых: если хочешь посимвольно сравнивать строки, то нужно не весь массив перебирать, а до конца строки, т.е. до '\0'.
В-третьих: убери break из цикла, и перенеси вывод ses за пределы цикла.

Добавлено через 1 минуту
Из файла строка считывается? Что там в файле?

Добавлено через 32 секунды
Цитата Сообщение от kamaek777 Посмотреть сообщение
клавиатурный тренажер
В чём суть тренажёра?
1
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
09.01.2017, 03:09  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
В-третьих: убери break из цикла.
опечатка,не заметил,спасибо
Цитата Сообщение от nd2 Посмотреть сообщение
Из файла строка считывается? Что там в файле?
да,считывается,в файле просто предложение,пока одно
Цитата Сообщение от nd2 Посмотреть сообщение
Во-вторых: если хочешь посимвольно сравнивать строки, то нужно не весь массив перебирать, а до конца строки, т.е. до '\0'.
да,хочу посимвольно
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 03:18
Цитата Сообщение от nd2 Посмотреть сообщение
Последний допустимый индекс 99, значит нужно просто < 100.
?
Цитата Сообщение от nd2 Посмотреть сообщение
перенеси вывод ses за пределы цикла.
?
Цитата Сообщение от kamaek777 Посмотреть сообщение
просто предложение,
Цитата Сообщение от kamaek777 Посмотреть сообщение
C++
1
cin >> sis;
cin >> предложения не читает, только слова. Тогда что сравниваешь? Или у тебя предложение из одного слова?
Цитата Сообщение от nd2 Посмотреть сообщение
В чём суть тренажёра?
?
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
09.01.2017, 03:27  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Сообщение от nd2
В чём суть тренажёра?
?
чтобы подсчитывал кол-во ошибок,скорость набора,пока проблема в подсчете ошибок
Цитата Сообщение от nd2 Посмотреть сообщение
cin >> предложения не читает, только слова. Тогда что сравниваешь?
сравниваю то что выведено из файла на экран и то,что пользователь ввел
Цитата Сообщение от nd2 Посмотреть сообщение
перенеси вывод ses за пределы цикла.
перенес
Цитата Сообщение от nd2 Посмотреть сообщение
если хочешь посимвольно сравнивать строки, то нужно не весь массив перебирать, а до конца строки, т.е. до '\0'.
вот это не совсем понял,куда '\0' писать
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 03:42
Цитата Сообщение от kamaek777 Посмотреть сообщение
чтобы подсчитывал кол-во ошибок
В чём ошибок?
Цитата Сообщение от kamaek777 Посмотреть сообщение
сравниваю то что выведено из файла на экран и то,что пользователь ввел
Цитата Сообщение от nd2 Посмотреть сообщение
Или у тебя предложение из одного слова?
?
Цитата Сообщение от nd2 Посмотреть сообщение
Последний допустимый индекс 99, значит нужно просто < 100.
?

Добавлено через 6 минут
Предположим, ты сравниваешь слова. В файле слово из пяти букв, а пользователь ввёл точно такое слово, но добавил ещё одну лишнюю букву (или не ввёл последнюю). Сколько будет ошибок ввода?
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
09.01.2017, 03:49  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
В чём ошибок?
ну например "клавиатурный тренажер",если написал "клавЕатурный тренажер",вывело 1 ошибку и т.д
Цитата Сообщение от nd2 Посмотреть сообщение
Или у тебя предложение из одного слова?
нет,из нескольких
Цитата Сообщение от nd2 Посмотреть сообщение
Последний допустимый индекс 99, значит нужно просто < 100.
это я сделал

Добавлено через 3 минуты
Цитата Сообщение от nd2 Посмотреть сообщение
Предположим, ты сравниваешь слова. В файле слово из пяти букв, а пользователь ввёл точно такое слово, но добавил ещё одну лишнюю букву (или не ввёл последнюю). Сколько будет ошибок ввода?
по сути 1
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.01.2017, 04:00
Цитата Сообщение от kamaek777 Посмотреть сообщение
нет,из нескольких
Цитата Сообщение от nd2 Посмотреть сообщение
cin >> предложения не читает, только слова.
Если хочешь сравнивать предложения из нескольких слов, то замени cin >> на getline().
Цитата Сообщение от kamaek777 Посмотреть сообщение
по сути 1
Чтобы твоя конструкция подсчёта ошибок работала при вводе разных по длине предложений, нужно, при создании массивов, обнулить их, и перебирать или весь массив (как у тебя), или сначала вычислить длину большего предложения, и заканчивать перебор, когда оно закончится.
C++
1
2
char sus[100] = {0};
char sis[100] = {0};
1
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
09.01.2017, 05:18  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Чтобы твоя конструкция подсчёта ошибок работала при вводе разных по длине предложений, нужно, при создании массивов, обнулить их, и перебирать или весь массив (как у тебя), или сначала вычислить длину большего предложения, и заканчивать перебор, когда оно закончится
спасибо,учел
Цитата Сообщение от nd2 Посмотреть сообщение
замени cin >> на getline()
cin.getline(sis,100) вроде так?если так,то теперь мне программа вообще не дает что либо ввести

Добавлено через 1 час 2 минуты
Цитата Сообщение от kamaek777 Посмотреть сообщение
замени cin >> на getline()
все,спасибо,допёр)
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
10.01.2017, 20:21  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
?
слушай,а ты не знаешь,как сделать таймер?то есть,когда мы выбираем начальный уровень,выводится строка из файла и начинает идти время,когда закончили ввод,должно вывести время,за сколько мы ввели все
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 20:42
Осуществить замер времени for и while

Добавлено через 8 минут
Время исполнения алгоритмов
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.01.2017, 21:31
kamaek777,
Помню, сам учился когда-то давно печатать на клавиатуре, используя клавиатурный тренажер.
Сейчас кстати ни чуть не жалею об этом приобретенном навыке,
очень спасает во всяких игровых чатах (особенно ночью).

Алгоритм тренажера был примерно такой:
1) генерится рандомная строка (где-то 10-15 символов), представляющая из себя
набор всяких частоиспользуемых в русском языке сочетаний букв (прямой намек на базу данных)
(окончания слов, короткие корни слов и т.п.).
Между этими сочетаниями вместе с тем, вставляются различные "сложные" буквы:
э, ъ, ю - до них сложновато дотягиваться при использовании слепого 10-пальцевого метода набора.

2) если пользователь ошибся на какой-либо букве при вводе,
то она неявно для него запоминается (формируется локальная для сеанса база данных).
В следующих разах эта буква будет встрчаться несколько чаще.

3) В следующей попытке генерится вновь строка с частыми буквенными сочетаниями,
но добавляется акцент на ошибочно набранные тобою буквы.

4) Повторяется шаг 3 до тех пор, пока пользователь правильно не ввел всю строку
с проблемными для него символами. Если он все таки допускает ошибку,
то в след раз генерится строка со все большим и большим числом проблемных символов.

Когда я тренировался, была у меня ситуация когда в строке были одни лишь чередования из
проблемных символов.

5) Если пользователь перестал допускать ошибки (научился набирать трудные символы),
то генерить строку из 1 шага.
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
10.01.2017, 23:10  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
?
Цитата Сообщение от nd2 Посмотреть сообщение
Осуществить замер времени for и while
Добавлено через 8 минут
Время исполнения алгоритмов
спасибо

Добавлено через 1 час 13 минут
Цитата Сообщение от nd2 Посмотреть сообщение
Осуществить замер времени for и while
вставил таймер в 1 кейсе,ругается на остальные кейсы и default,что не так?
Кликните здесь для просмотра всего текста
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <iostream>
#include <conio.h>
#include <ctime>
#include <time.h>
#include <stdlib.h>
#include <fstream>
#include <windows.h>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "rus");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ifstream sos;
    double seconds;
    int Level, ses = 0, i;
    const int buff = 100;
    char sus[100] = { 0 }, sis[100] = { 0 };
    system("color 2");
 
 
    cout << "\t\tВыберите пункт:\n";
    cout << "1 - Начальный уровень;\n";
    cout << "2 - Средний уровень;\n";
    cout << "3 - Тяжелый уровень;\n";
    cout << "4 - тренировка ввода цифр;\n";
    cout << "5 - справка;\n";
    cout << "6 - выход;\n";
    cout << "... ";
 
    cin >> Level;
 
    switch (Level) {
    case 1:
        sos.open("words.txt");
        sos.getline(sus, 100);
        
        cout << sus << "\n";
        unsigned int start_time = clock();
        cin.get();
        cin.getline(sis, 100);
        unsigned int end_time = clock();
        for (i = 0; i < 100; i++){
            if (sus[i] != sis[i])
            {
                ses++;
            }
        }
    
        
        
        cout << "у вас " << ses << " ошибок";
unsigned int search_time = end_time - start_time;
        cout << "Скорость печати: " << search_time / CLOCKS_PER_SEC << "сек" << endl;
        break;
 
    case 2:
        sos.open("words.txt");
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin.get();
        cin.getline(sis, 100);
        for (i = 0; i < 100; i++){
            if (sus[i] != sis[i])
            {
                ses++;
            }
        }
        cout << "у вас " << ses << " ошибок";
        break;
    case 3:
        sos.open("words.txt");
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin.get();
        cin.getline(sis, 100);
        for (i = 0; i < 100; i++){
            if (sus[i] != sis[i])
            {
                ses++;
            }
        }
 
        cout << "у вас " << ses << " ошибок";
 
 
        break;
 
    case 4:
        sos.open("words.txt");
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        sos.getline(sus, 100);
        cout << sus << "\n";
        cin.get();
        cin.getline(sis, 100);
        for (i = 0; i < 100; i++) {
            if (sus[i] != sis[i])
            {
                ses++;
            }
        }
 
        cout << "у вас " << ses << " ошибок";
 
 
        break;
    case 5:
        sos.open("spravka.txt");
        sos.getline(sus, 100);
        cout << sus << "\n";
 
 
        break;
    case 6:
        exit(1);
        break;
 
    default:
        cout << "\n ERROR! Invalid value!";
        exit(1);
    }
        
    
 
    cout << "\n нажмите любую кнопку для продолжения...";
    getch();
    system("cls");
 
 
    return 0;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 23:13
Цитата Сообщение от kamaek777 Посмотреть сообщение
ругается
Какими словами?
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
10.01.2017, 23:22  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Какими словами?
вот такими словами)
Кликните здесь для просмотра всего текста
error C2360: пропуск инициализации "search_time" из-за метки "case"
error C2360: пропуск инициализации "end_time" из-за метки "case"
error C2361: пропуск инициализации "start_time" из-за метки "default"
error C2361: пропуск инициализации "search_time" из-за метки "default"
error C2361: пропуск инициализации "end_time" из-за метки "default"
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.01.2017, 23:24
Помести каждый case (т.е., то, что после) в {}.
1
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
10.01.2017, 23:53  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Помести каждый case (т.е., то, что после) в {}.
Спасибо,помогло
и еще вопросик,у меня четвертым пунктом идет тренировка ввода цифр,так вот,выводится из файла следующая строка - "4356 242253 643456 55 5 67 424 09 " вбиваю все без ошибок,но мне выводит,то,что я допустил 53 ошибки,ведь например,цифру 5 можно считать за символ,так почему мне засчитывается как ошибка?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case 4:{
               sos.open("words.txt");
               sos.getline(sus, 100);
               sos.getline(sus, 100);
               sos.getline(sus, 100);
               sos.getline(sus, 100);
               cout << sus << "\n";
               cin.get();
               cin.getline(sis, 100);
               for (i = 0; i < 100; i++) {
                   if (sus[i] != sis[i])
                   {
                       ses++;
                   }
               }
 
               cout << "у вас " << ses << " ошибок";
 
 
               break;
    }
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.01.2017, 00:00
У тебя ses где обнуляется?
0
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 20
11.01.2017, 00:11  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
У тебя ses где обнуляется?
Кликните здесь для просмотра всего текста
C++
1
2
int main() {
int Level, ses = 0, i;
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
11.01.2017, 00:52
Я к тому спросил, что ses нужно обнулять в каждом case.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2017, 00:52
Помогаю со студенческими работами здесь

Клавиатурный тренажер - не прекращается выполнение цикла
Здравствуйте! Подскажите пожалуйста, вот часть кода main: void main() { srand((unsigned)time(0)); // Код клавиши Esc const...

Клавиатурный шпион или что-то в этом роде
Помогите написать программу, реагирующую на все нажатия клавиатуры в Windows и выполняющую какие-нибудь действия в зависимости от нажатой...

Пишу клавиатурный кликер в консоли. Хочу добавить автоклик
Как сделать так что бы можно было долбить по клаве и одновременно каждую секунду прибавлялись денюжки.

Посоветуйте тренажер по С++
Ищу тренажер по С++, чтобы на досуге можно было закрепить полученные навыки. Встречал по HTML - выдает какие-то конструкции, а ты...

Тренажер клавиатуры
Помогите, пожалуйста! как правильно реализовать такую задачу? Определить класс «Тренажёр клавиатуры», с закрытым элементом строкой s1...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru