SIGINT处理和getline

时间:2009-11-21 11:22:50

标签: c++ linux signals sigint

我写了这个简单的程序:

void sig_ha(int signum)
{
cout<<"received SIGINT\n";
}

int main()
{
 string name;
 struct sigaction newact, old;
 newact.sa_handler = sig_ha;
 sigemptyset(&newact.sa_mask);
 newact.sa_flags = 0;
 sigaction(SIGINT,&newact,&old);

 for (int i=0;i<5;i++)
     {
     cout<<"Enter text: ";
     getline(cin,name);
     if (name!="")
         cout<<"Text entered: "<<name;
     cout<<endl;
     }
 return 0;
}

如果我在程序等待输入时按下ctrl-c,我会得到以下输出:
输入文字:收到SIGINT

输入文字:
输入文字:
输入文字:
输入文字:

(程序继续循环而不等待输入)

我该怎么办?

1 个答案:

答案 0 :(得分:4)

尝试在cout声明之前立即添加以下内容:

cin.clear();  // Clear flags
cin.ignore(); // Ignore next input (= Ctr+C)