C++计时器小程序的相关bug解决及算法优化

#问题

本人初学C++,编译了一个计时小程序遇到诸多问题和bug。
计时程序用了两条线路,一个是void指针函数,另一个是主函数。void函数主要辅助计时程序。主函数主要是判断和运行。
当输入的数字不是对应数字时,主函数会判断并让用户重新输入数字,但字符串或字母无法做到。程序会出现bug。

#问题描述

正常运行可以但存在bug

bug1:
当输入整型变量int时,一旦输入字母或其他字符串。cin输入锁死。无法进行下一步操作。我目前的解决思路是,当用户一旦输入的不是数字,直接结束程序。

bug1修复思路:
只要是字符或字符串以及不是对应数字的数字(如胡乱输入的数字),均跳转为重新输入界面。本人代码能力有限,多次尝试修复无果。

bug2:
当计时开始后中断计时或者输入的不是对应数字时,两者都将重新跳转至主函数cout,此时必须随机输入一个数字才可运行,如果不输入数字,程序将停滞。不知道为何无法直接跳转至主函数。输入字母直接锁cin。
目前的解决思路是弹出文字提示:随机输入一个数字继续。但这种行为太过无用。因此想请教如何不用输入任意数字直接跳转到主函数cout文字。

bug3:
当计时开始后本人设定的程序是按空格直接中断计时。但是空格灵敏度不够高,多次按空格才能够中断。本人猜测为空格检测算法有问题,因此向各位请教如何按一下空格直接中断计时。本人检测空格用kbhit()函数。

优化1:本人用现实世界测试,发现该程序计时时间与真实时间相差1.25s(甚至更多)之差。于是请教各位如何优化算法,使计时准确度提高。最大相差应不超过0.1s。

#总结
本人请教各位C++程序设计方面的内容
内容包括:
一个计时器。按1开始计时,按2退出程序。
输入的不是1或2或者输入的是字符或字符串时,要求重新输入。
按1计时时,计时误差(与真实世界)应小于0.1s 并且在计时过程中随时按空格随时停止计时。并返回计时开始前界面。

请求各位指点迷津&&修复bug&&优化算法。
谢谢!
下面是源代码

#include  
#include  
using namespace std;
void DoWork()
{
    int a=0,b=0,c=0,n;
    for(int i=0;;i++)
{
    //system("cls");
    //cout<<"\033c";
    a+=1;
    //Sleep(1*1000); 
    Sleep(0.01*1000);
    if(a==60)
    {
        a=0;
        b+=1;
    }
    if(b==60)
    {
        b=0;
        c+=1;
    }
    if(b==0&&c==0)
    {
    cout<<a<<endl;
    cout<<"你已经在线长达"<<a<<"秒"<<endl; 
    }
    if(b!=0&&c==0)
    {
    cout<<b<<":"<<a<<endl;
    cout<<"你已经在线长达"<<b<<"分"<<a<<"秒"<<endl; 
    }
    if(c!=0)
    {
    cout<<c<<":"<<b<<":"<<a<<endl;
    cout<<"你已经在线长达"<<c<<"时"<<b<<"分"<<a<<"秒\b" ;
    }
    cout<<"\n按空格随时中断计时\n";
    if(kbhit())
    {
        n=getch();
        if(kbhit()&&getch()==' ') 
        {
            system("cls");
            cout<<"\n计时结束\n\n===============================\n\n";
            Sleep(1*1000);
            system("cls");
            break;
            
        }
        else n==0;
    }
    Sleep(0.99*1000);
    system("cls");
    
}
}
int main()
{
    long long int m=0; 
    int s=0;
    for(int k=0;;k++)
    {
        system("cls");
         cout<<"\n  计时器\n按1开始计时   \n按2退出程序\n\n 1. 该程序仅供学习交流,切勿用于非法用途\n 2. 该程序经过测试,与真实时间慢1.25s左右。故计数时间仅供参考,切勿用于专业测试"<<endl;
        cout<<"\n请输入对应数字"<<endl;
        
    
        cin>>m;
        if(m==1)
        {
            system("cls");
            cout<<"开始计时!"<<endl;
            Sleep(1.*1000);
            system("cls");
            DoWork();
            cout<<"\n输入任意数字继续\n";
            
        }
        if(m==2)
        {
            system("cls");
            cout<<"程序即将结束......"<<endl;
            Sleep(1*1000);
            break;
            return 0;
        }
        if(m!=1&&m!=2)
        {
            system("cls");
            cout<<"你输入的数字不对。"<<endl;
            Sleep(0.3*1000);
            cout<<"请重新输入"<<endl;
            Sleep(0.5*1000);
            cout<<"\n输入任意数字继续\n";
            
        }
        if(!(cin>>m)) 
        {
            system("cls");
            cout<<"\n你输入的不是数字,程序被迫结束!\n";
            Sleep(0.8*1000);
            //return 0;
            break;
        }
    }
    cout<<"程序即将结束......"<<endl;
    Sleep(1*1000);
    return 0;
}

```

发现输入格式不对时,
cin.clear();
cin.sync();
重新输入