我正在尝试捕捉 Ctrl + c 。我在谷歌上搜索并找到这段代码:
#include <windows.h>
#include <iostream>
#include <signal.h>
#include<cstdio> using namespace std;
BOOL WINAPI ConsoleHandler(DWORD CEvent){
if(CEvent == CTRL_C_EVENT){
cout<<"ctrl c pressed"<<endl;
Sleep(100);
}
return TRUE; }
int main(int argc, char *argv[]){
char a[10];
if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE)ConsoleHandler,TRUE)==FALSE){
cout<<"Unable to install handler!";
return -1;
}
while(true){
fflush(stdin);
scanf("%[^\n]s",a);
cout<<a<<endl;
} }
运行此代码时我输入“ abcd ”然后显示“ abcd ”正常然后按 Ctrl + c '显示ctrl c按abcd **“我怎样才能修复此代码,以便按 Ctrl + <时显示” ctrl c press “ kbd> c ?
答案 0 :(得分:0)
输出&#34; abcd&#34;再次是因为它仍然在你上次的a
变量中。解决此问题的最佳方法是使用scanf
的返回值。 scanf
返回填写的项目数,因此在您的情况下,您希望它返回1.
if (scanf("%[^\n]s", a) == 1)
cout<<a<<endl;