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。有关如何解决此问题的任何建议?
答
哦,我可以回答我自己的问题。正如@Alf所建议的那样(谢谢),我似乎不应该试图将转义序列打印到cerr,因为我的终端会解释这个转义序列,在我的情况下,使用gnome-terminal时,它是否定的-没有。
感谢有用的见解人!
你正在将你的输出(包括转义字符)发送到'cout',这听起来像是你的终端(因为你说你看到三条空白行)。你打算如何使仪器命令真正到达仪器? – 2014-09-22 23:01:24
你确定数据流正在被引导到正确的地方吗?一个明显的解释是如果终端(或某些Linux服务)被转义序列弄糊涂了。 – Steve314 2014-09-22 23:01:53
我使用cout,因为我将使用socat(如果您熟悉它)通过tcp/ip将此程序的stdout连接到telnet会话。我做了一个关于这个连接两个socat会话的虚拟运行,从一个会话运行stdio到另一个会话的stdio。这导致程序会话的输出端(打印stderr到屏幕)冻结,而另一个会话完成并成功退出。 – 2014-09-22 23:07:13