在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?

在做解析IP数据包,请问在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?请给出代码和例子... 在做解析IP数据包,请问在C++里如何在程序执行时按一下空格停止,然后按一下空格继续执行?如何实现按下ctrl+c后重新运行程序?请给出代码和例子 展开
 我来答
I_everything
2013-06-14 · 超过24用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:67万
展开全部
#include <stdio.h>
#include <conio.h>

void DoWork()
{
    printf("Hello world!\n");
}

int main()
{
    int k;
    while(1)
    {
        DoWork();
        if(kbhit())
        {
            k=getch();
            if(k==' ')
            {
                while(1)
                if(kbhit() && getch()==' ')
                break;
            }
            else if(k==27)//ESC
                break;
        }
    }
    return 0;
}

这个样例是一个程序不断输出hello world,按下空格后暂停输出,暂停后只有按下空格才能恢复。按下ESC后退出。


不过ctrl_c重新运行有点困难。。ctrl_c通常会使程序中断。虽然getch()能截断ctrl_c的指令,使程序不会中断。但是在和kbhit()组合使用时发现kbhit()之后的第一个getch()不能截断ctrl_c的指令。目前我还没想到什么好的方法。。。


kbhit()函数一般来说用来检测是否有按键按下,否返回0,是返回非零值。不过严格说并不是"检测是否有按键按下",你可以自己把这个函数和常规的输入输出函数scanf等组合使用来探究一下。另外kbhit()只是检测并不会将按键信息消除,使得和getch()的组合成为可能。


getch()获取当前按下的键,返回值是一个整型,可以用int来接收。你可以自己写个简单的程序,按下键后输出getch()的返回值,来查看每个键分别对应着哪个值。貌似用的是ASCII码。

这个测试程序直接贴一个给你好了。。

#include <conio.h>
#include <stdio.h>
int main()
{
    int key;
    while(1)
    {
        key=getch();
        printf("%d\n",key);
    }
}

哦对了。。kbhit()和getch()两个函数都包含在conio.h中

欢乐多Ek
2013-06-14 · TA获得超过478个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:417万
展开全部
空格控制停止继续,最简单的就是线程控制,至于ctrl+C的话,注册信号:
#inlude <signal.h>
程序里面注册 signal(SIGINT,yourfunc);
yourfunc就是你的控制函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linzjay
2013-06-14 · TA获得超过257个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:251万
展开全部
我记得system("pause")可以做到这一点,你试试
追问
那个是程序自己停止的,我想要的是从键盘按按一下空格停止,然后按一下空格继续执行的那种。system("pause")可以实现吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深海_蓝鱼
2013-06-14 · TA获得超过423个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:237万
展开全部
楼上两位都会让程序阻塞,getch()和pause都是阻塞语句,程序只会一直停着等待键盘输入。要做你说的这个功能只能新建一个线程,把你原来的功能放到新线程里,
主程序里只要开始这个线程,然后getch(); 第一次收到的时候suspend你的工作线程,第二次再resume
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
敏澎Q1
2013-06-14 · TA获得超过991个赞
知道小有建树答主
回答量:944
采纳率:0%
帮助的人:762万
展开全部
控制台下:
printf("test\n");
if (!getch()) getch();
return 0;
追问
看不懂,能不能解释一下?或者给你程序,帮我改一下?
追答
你建一个控制台的程序,用C++建。

然后把这代码填进去就行了。

getch()可以实现按下空格往下走的功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式