C++【求助】如何写一个当用户按下Ctrl+C,返回一个值并且不会关闭的程序...

急。在线等啊、是Windows环境下的,命令行界面,是C++的。... 急。
在线等啊、是Windows环境下的,命令行界面,是C++的。
展开
 我来答
adoqq_bd
推荐于2018-03-26 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1628万
展开全部
/*注册信号处理函数。给你个例子*/
#include <signal.h>
#include <Windows.h>
#include <iostream>
using namespace std;
void cs(int n)
{
if(n==SIGINT)
{
cout<<"\n你按下了ctrl+c"<<endl;
signal(SIGINT, cs);
return;
}
if(n==SIGBREAK)
{
cout<<"\n你按下了ctrl+break,现在退出程序\n";
exit(0);
}
}
int main()
{
char ch;
signal(SIGINT, cs); /*注册ctrl+c信号捕获函数*/
signal(SIGBREAK,cs); /*注册ctrl+break信号捕获函数*/
while(1)
{
cin>>ch;
Sleep(10);
if(cin.fail())
{
cin.clear();
cin.sync();
}
}
return 0;
}
leopanhang
2012-06-30 · 超过16用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:63.5万
展开全部
100分让我进来的,但是无从下手。
1. 请明确需求
1.1 该用户使用图形界面还是字符界面?
1.2 如果图形界面,Ctrl + C 只是复制的默认快捷键,这个是系统定义的,你只要在自己的程序里面覆写这个快捷键就可以了。Hook 可以做到。
1.3 字符界面同样也是如此。
等你明确了需求,程序是很容易写出来的。
追问
命令行界面。具体怎么做呀
追答
哇噻,200分了,还在线等,呵呵。
这样,第一种方法,用signal :
#include
#include
#include
#include

BOOL WINAPI ConsoleHandler(
DWORD dwCtrlType // control signal type
);

int main(int argc, char *argv[])
{
if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)
{
// unable to install handler...
// display message to the user
printf("Unable to install handler!\n");
return -1;
}

while(true)
{

}
}

BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
char mesg[128];

switch(CEvent)
{
case CTRL_C_EVENT:
MessageBox(NULL,
_T("CTRL+C received!"),_T("CEvent"),MB_OK);
std::cout << "控制台输出" << std::endl;
break;
}
return TRUE;
}

第二种方法,使用 SetConsoleMode 函数,你查一下MSDN,这个可以设定console 模式,来屏蔽Ctrl+C 这个终止控制台程序的组合键,代之以传给你指定的某个进程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tseug8271
2012-06-30 · TA获得超过1498个赞
知道小有建树答主
回答量:745
采纳率:100%
帮助的人:369万
展开全部
DOS 下的程序

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define ABORT 0
#define CONTINUE -1
int c_break(void)
{
int ch;
printf("Control-C pressed, Exit program? (Y/N)\n");
ch = getch();
if(ch=='Y'||ch=='y')
return (ABORT);
else
return(CONTINUE);
}
void main(void)
{
ctrlbrk(c_break);
for(;;)
{
printf("Looping... Press <Ctrl-C> to quit:\n");
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhtzu
2012-06-30 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4268万
展开全部
Ctrl+C会关闭程序。。。是DOS命令行界面吧,这个底下就不要想了,费事不说,程序出来实在是没什么用。
如果是课程作业什么的,不建议和这个较劲,费事不讨好。
如果是项目工作。。。额。。这个好像不会用DOS命令行界面吧
追问
唉、就是项目工作啊。帮帮忙吧、想到蛋疼。
追答
项目??这个有点晕。。。很久很久没弄DOS底层了,应该是可以通过预先的系统函数调用关闭这些东西,但想不起来了。现在家里没有虚拟工作环境,没法帮你试。看看楼下的ctrlbrk行不行吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
用电知识分享
2012-06-30 · TA获得超过1832个赞
知道小有建树答主
回答量:841
采纳率:69%
帮助的人:269万
展开全部
如果是Linux下就好了,信号通信,重新定义Ctrl+C事件 要执行的函数就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式