Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Написание секундомера в консоли. (http://forum.oszone.net/showthread.php?t=182404)

котвася 07-08-2010 21:52 1469036

[решено] Написание секундомера в консоли.
 
вот написал таймер, ток не могу придумать как остановить.
Помогите.
Код:

//STOPWATCH.CPP
//Снкундомер в консоли.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::setw;
#include <time.h>

void wait(int seconds)
{
  clock_t endwait;
  endwait = clock () + seconds * CLOCKS_PER_SEC ;
  while ((clock() < endwait)) {}
}

void printStopWatch(int seconds = 0, int status = 0)
{
        char *ptr[10] = {"СЕКУНДОМЕР", "РАБОТАЕТ", "CТОП"};
        cout << "********************" << endl;
        cout << "********************" << endl;
        cout << "|    " << setw(10) << *(ptr+status) << "    |" << endl;
        cout << "|      " << setw(2) << seconds/60 << " : "
                << setw(2) << ((seconds < 60) ? seconds : seconds%60) << "    |" << endl;
        cout << "********************" << endl;
        cout << "********************" << endl;
         
}

int main()
{
        setlocale(LC_ALL, ".1251");
        cout << "Приложение секундомер" << endl;
    int n = 0;
        bool status = true;
        printStopWatch(0,0);
        cout << "Нажмите клавишу Enter для начала...";
        cin.get();
        while(status != false)
        {
                system("cls");
                printStopWatch(n,1);
                wait (1);
                n++;
        }
              printStopWatch(n, 3);
        return 0;
}


котвася 07-08-2010 21:54 1469037

по задумке моей надо изменить bool ststus в true чтоб остановить

AlexTNT 08-08-2010 18:49 1469462

Можно было бы нажать на кнопку Pause(Break), правда всё исчезает...

котвася 08-08-2010 20:01 1469520

Если нажать Pause(Break) у меня не чего не исчезает, программа останавливается. И продолжает работать дальше после нажать любой другой. Как сделать что бы хотя бы после нажатия "любой другой" останавливалась навсегда?

AlexTNT 08-08-2010 20:31 1469548

Может сделать в визуальном режиме?

котвася 11-08-2010 00:25 1471132

ЭВРИКА РАБОТАЕТ!!!!!!!
Код:

//STOPWATCH.CPP
//Снкундомер в консоли.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::setw;
#include <time.h>
#include <windows.h>

void printStopWatch(int seconds = 0, int status = 0)
{
        system("cls");
        char *ptr[10] = {"СЕКУНДОМЕР", "РАБОТАЕТ", "CТОП"};
        cout << "********************" << endl;
        cout << "********************" << endl;
        cout << "|    " << setw(10) << *(ptr+status) << "    |" << endl;
        cout << "|      " << setw(2) << seconds/60 << " : "
                << setw(2) << ((seconds < 60) ? seconds : seconds%60) << "    |" << endl;
        cout << "********************" << endl;
        cout << "********************" << endl;
        if(status==0)
                cout << "Нажмите клавишу Enter для начала...";
        if(status==1)
                cout << "Нажмите клавишу Enter для остановки...";
         
}
void wait(int seconds)
{
        clock_t endwait;
        endwait = clock () + seconds * CLOCKS_PER_SEC ;
          while((clock() < endwait)){        }
        return;
}

int main()
{
        setlocale(LC_ALL, ".1251");
        cout << "Приложение секундомер" << endl;
              int n = 0;
        bool status = true;
        printStopWatch(0,0);
        cin.get();
        while(status != false)
        {
                printStopWatch(n,1);
                wait(1);
                n++;
                if(GetKeyState(VK_RETURN) == false)
                        status=false;
        }
        printStopWatch(n, 2);
        system("pause");
        return 0;
}

правда, через раз, резче Enter надо нажимать ☺☺☺☺
вот более совершенный цикл
Код:

        while(status != false)
        {
                printStopWatch(n,1);
                wait(1);
                if(GetKeyState(VK_RETURN) == false)
                {
                        status=false;
                        break;
                }
                n++;
        }


котвася 11-08-2010 12:28 1471346

ха облазил весь рунет, это наверное единственный секундомер в консоли :)


Время: 07:01.

Время: 07:01.
© OSzone.net 2001-