c + +不能打印转义字符

问题描述:

我想写一个程序,与一些需要命令开始与转义字符(ascii 27)的仪器进行交互,但我有麻烦测试,因为程序似乎挂起试图打印转义字符。这个程序被编译以在Ubuntu机g ++以及从侏儒末端运行:c + +不能打印转义字符

#include <cstdlib> 
#include <iostream> 
#include <unistd.h> 
#include <limits> 

using namespace std; 

int main() 
{ 
    string str; 
    const int numSamples=10; 
    const int escapeInt = 27; 
    const char escapeChar = escapeInt; 

// sleep(30); 
    //Ask for the latest test results 
    cin.clear(); 
// cin.ignore(numeric_limits<streamsize>::max()); 
    cout << "\n\n\n"; 
    cout << escapeChar << "PF2 -" << numSamples; 
    cerr << "\n\n\n" << escapeChar << "PF2 -" << numSamples; 
// cin.ignore(2,'\n'); 
    getline(cin, str, '\n'); 
    cerr << str; 

    int k=1; 
    while (k<=numSamples)//getline(cin, str)) 
    { 
     getline(cin, str, '\n'); 
     k++; 
     cerr << str << endl; 
    } 

    return 0; 
} 

输出是只有三个空白行,然后程序变得无法响应。它甚至不响应ctrl-c。有关如何解决此问题的任何建议?

+1

你正在将你的输出(包括转义字符)发送到'cout',这听起来像是你的终端(因为你说你看到三条空白行)。你打算如何使仪器命令真正到达仪器? – 2014-09-22 23:01:24

+0

你确定数据流正在被引导到正确的地方吗?一个明显的解释是如果终端(或某些Linux服务)被转义序列弄糊涂了。 – Steve314 2014-09-22 23:01:53

+0

我使用cout,因为我将使用socat(如果您熟悉它)通过tcp/ip将此程序的stdout连接到telnet会话。我做了一个关于这个连接两个socat会话的虚拟运行,从一个会话运行stdio到另一个会话的stdio。这导致程序会话的输出端(打印stderr到屏幕)冻结,而另一个会话完成并成功退出。 – 2014-09-22 23:07:13

哦,我可以回答我自己的问题。正如@Alf所建议的那样(谢谢),我似乎不应该试图将转义序列打印到cerr,因为我的终端会解释这个转义序列,在我的情况下,使用gnome-terminal时,它是否定的-没有。

感谢有用的见解人!