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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
shaffle
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 85
#1

Секундомер с выводом на экран - C++

20.11.2011, 01:56. Просмотров 1797. Ответов 13
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int ms=0,s=0,m=0,h=0,ch,hh=3600,mm=60,ss=1000;
    do
    {
        system("cls");
        ms++;
        if (ms==ss)
        {
            s++;
            ms=0;
        }
        if (ms==ss*mm)
            m++;
        if (ms==ss*hh)
            h++;
        cout<<h<<":"<<m<<":"<<s<<"."<<ms;
 
        Sleep(1);
        
        
    }
    while(getch);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 01:56     Секундомер с выводом на экран
Посмотрите здесь:

Секундомер C++
секундомер C++
Секундомер. C++
C++ Проблема с выводом кириллицы на экран
Секундомер C++
C++ Секундомер на С++
C++ секундомер
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.11.2011, 02:54     Секундомер с выводом на экран #2
Цитата Сообщение от shaffle Посмотреть сообщение
Sleep(1);
Потому что sleep для 1 миллисекунды работает не точно. Примерно точно начинает где-то с 15-25 миллисекунд.
shaffle
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 13:03  [ТС]     Секундомер с выводом на экран #3
понял, а как сделать тогда что бы с цыкла можно было выйти при нажатии клавиши?

Добавлено через 10 часов 7 минут
kbhit не работает как надо(
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
20.11.2011, 15:02     Секундомер с выводом на экран #4
Цитата Сообщение от shaffle Посмотреть сообщение
kbhit не работает как надо(
CreateThread
shaffle
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 16:02  [ТС]     Секундомер с выводом на экран #5
CreateThread
не работает, или может я не правильно его использовал...
как в коде он будет выглядеть?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
20.11.2011, 17:29     Секундомер с выводом на экран #6
C
1
2
3
4
5
6
7
8
9
DWORD WINAPI ThreadFunc(LPVOID lpParam) 
{
...
}
int main ()
{
CreateThread(0,0,ThreadFunc,0,0)
return 0;
}
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 1
20.11.2011, 17:33     Секундомер с выводом на экран #7
Van111, а каким образом CreateThread() заменяет kbhit() ?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
20.11.2011, 17:34     Секундомер с выводом на экран #8
Цитата Сообщение от shaffle Посмотреть сообщение
kbhit не работает как надо(
Как вы узнали, что эта функция не работает?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
20.11.2011, 17:53     Секундомер с выводом на экран #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
Van111, а каким образом CreateThread() заменяет kbhit() ?
не тормозит основную программу

kbnit() так и работает я просто её разложил
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 1
20.11.2011, 18:05     Секундомер с выводом на экран #10
Цитата Сообщение от Van111 Посмотреть сообщение
kbnit() так и работает я просто её разложил
Не знаю как работает kbhit(), но по-моему она просто читает буфер консоли и проверяет есть ли там событие нажатия клавиши на клавиатуре. Зачем отдельный поток то?

Добавлено через 5 минут
Я думаю kbhit() на самом деле выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
 const int count=20;
 HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
 INPUT_RECORD IR[count];
 DWORD read;
 
 while(PeekConsoleInputA(hstd, IR, count, &read)){
         for(int i=0;i<read;i++)
            if(IR[i].EventType==KEY_EVENT)
                 return true
 }
return false;
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
20.11.2011, 18:11     Секундомер с выводом на экран #11
Kastaneda, всё что не затормозит программу будет выполнятся в другом потоке
shaffle
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 85
20.11.2011, 18:15  [ТС]     Секундомер с выводом на экран #12
ну когда я нажимаю клавишу, он останавливает цыкл, но и в тоже время выходит с функции по неизвестным причинам, и выводит на экран результат и быстро проподает он

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
system("cls");
    cout<<"Что бы запустить секундомер, любую кнопку\n";
    if (_getch()!=0)
    {
        cin.sync();
        int ms=0,s=0,m=0,h=0,ch,hh=3600,mm=60,ss=10;
        do
        {
            system("cls");
            ms++;
            if (ms>=ss)
            {
                s++;
                ms=0;
            }
            if (ms>=ss*mm)
                m++;
            if (ms>=ss*hh)
                h++;
            cout<<h<<":"<<m<<":"<<s<<"."<<ms<<endl;
            cout<<"Что бы остановить время нажмите любую клавишу\n";
            Sleep(70);      
    }
    while(!kbhit());
    cout<<h<<":"<<m<<":"<<s<<"."<<ms;
    _getch();
Игорь с++
433 / 456 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
20.11.2011, 18:17     Секундомер с выводом на экран #13
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
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <cstring>
#define WIDTH 80
#define HEIGHT 22
using namespace std;
int main()
{
    system("color 40");
     system("mode con cols=35 lines=3");
    system("title ÒÀÉÌÅÐ");
    int has,min,sek,mil;
    has=0;min=0;sek=0;mil=0;
    cout<<"\n      Press any key to start";
    getch();
    system("cls");
    cout<<"\n\n      Press any key to stop";
          char str[] = "\\";
        HANDLE hCon;
        COORD cPos;
        hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    for(;;){
            if (kbhit()){system("cls");
            cout<<"\n\n      Press any key to exit";
            cPos.Y = HEIGHT + (-21);
        cPos.X = ( WIDTH - strlen(str) ) + (-65);
        SetConsoleCursorPosition(hCon, cPos);
            cout<<has<<":"<<min<<":"<<sek<<":"<<mil;getch();Sleep(100);getch();return 0;}
            mil=mil+1;
            if(mil==64){sek++;mil=0;}
            if(sek==60){min++;sek=0;}
            if(min==60){has++;min=0;}
      cPos.Y = HEIGHT + (-21);
        cPos.X = ( WIDTH - strlen(str) ) + (-65);
        SetConsoleCursorPosition(hCon, cPos);
            cout<<has<<":"<<min<<":"<<sek<<":"<<mil;
            Sleep(1);
        
            }
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 18:23     Секундомер с выводом на экран
Еще ссылки по теме:

Секундомер C++
C++ секундомер или таймер
C++ Как сделать поиск в JSON-файле с выводом на экран
Секундомер C++
C++ Бинарное древо (реализовать структуру и обход веток с выводом на экран) - C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4468 / 2830 / 224
Регистрация: 12.12.2009
Сообщений: 7,199
Записей в блоге: 1
Завершенные тесты: 1
20.11.2011, 18:23     Секундомер с выводом на экран #14
Цитата Сообщение от shaffle Посмотреть сообщение
ну когда я нажимаю клавишу, он останавливает цыкл, но и в тоже время выходит с функции по неизвестным причинам, и выводит на экран результат и быстро проподает он
ну так kbhit() не считывает символ, а просто проверяет была ли нажата клавиша, поэтому тут:
C++
1
2
3
while(!kbhit());
        cout<<h<<":"<<m<<":"<<s<<"."<<ms;
        _getch()
выводится результат и ф-ция getch() сразу же считывает нажатую клавишу, поэтому программа закрывается.
Yandex
Объявления
20.11.2011, 18:23     Секундомер с выводом на экран
Ответ Создать тему
Опции темы

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