1

我有一个简单的程序,它启动一个循环计时器,然后进入一个解析任何输入数据的 getline 循环。然而,每当定时器信号出现时,它都会结束 getline 函数,看起来好像用户按下了回车键。我怎样才能阻止信号这样做?或者如果做不到这一点,我如何区分真正的返回压力和信号?后者不太理想,因为我必须在 400Hz 下运行这个微分代码。

下面是我目前用来获取一行的代码。空白输入将重新打印 APP > 行,而任何其他输入都会通过。

do
    {
        std::cin.clear();
        line.clear();
        std::cout << "APP > ";
        std::getline(std::cin, line);
    }
    while (line.length() == 0);

谢谢大家

马特

4

2 回答 2

0

您不检查std::cin. 我想知道警报响起后是否设置了故障位。

于 2012-11-09T20:46:32.297 回答
-1

我不明白你的问题,也无法重现。以下程序正确读取标准输入处理信号;两者都不会妨碍对方:

#include <csignal>
#include <cstdlib>
#include <string>
#include <iostream>

void handle(int n)
{
    static unsigned int count = 0;

    std::cout << "Signal: " << n << std::endl;  // not safe, I know...

    if (++count == 5)
    {
        std::cout << "Too many signals, goodbye!\n";
        std::exit(0);
    }
}

int main()
{
    std::signal(SIGINT, handle);

    for (std::string line; std::getline(std::cin, line); )
    {
        std::cout << "You said: " << line << std::endl;
    }

    std::cout << "End of input, goodbye!\n";
}
于 2012-11-09T20:48:34.630 回答