我有一个C ++程序,它应该在控制台中打印出结果,作为命令行参数传递给另一个程序。
我遇到的问题是两个输出被打印为一个没有空格的单个字符串,所以不会被视为两个单独的参数。
是否可以在其中一个字符串的开头添加一个空格来分隔参数?
这是程序应该输出的内容:
0 haarcascade_frontalface_alt.xml 2014-10-16T11:00:46
1 haarcascade_frontalface_alt.xml 2014-10-16T11:00:46
2 haarcascade_frontalface_alt.xml 2014-10-16T11:00:47
3 haarcascade_frontalface_alt.xml 2014-10-16T11:00:47
而是输出:
0haarcascade_frontalface_alt.xml 2014-10-16T11:00:46
1haarcascade_frontalface_alt.xml 2014-10-16T11:00:46
2haarcascade_frontalface_alt.xml 2014-10-16T11:00:47
3haarcascade_frontalface_alt.xml 2014-10-16T11:00:47
这些是应该打印的字符串:
int eventCount = 0;
string cascadeName = "haarcascade_frontalface_alt.xml";
string nestedCascadeName = "haarcascade_frontalface_alt.xml";
我正在使用以下方式打印它们:
std::cout << ("%s", cascadeName);
std::cout << ("%d", eventCount);
timeFound();
std::cout << std::flush;
timeFound():
int timeFound() {
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,80," %Y-%m-%dT%H:%M:%S",timeinfo);
puts (buffer);
eventCount++;
return 0;
}
如何按预期输出打印输出?
N.B。我试过在两个印刷线上添加空格但似乎没有效果。我也尝试在string
声明中添加空格,但这导致程序无法找到分类器XML文件。
答案 0 :(得分:0)
当然 - 只需插入一些空格,如下所示:
std::cout << cascadeName << " " << eventCount << " " << timeFound() << std::endl;
<小时/> 顺便说一下:
std::cout << ("%s", cascadeName);
没有按照您的想法执行操作 - 您无法使用printf
样式格式化std::cout
- 您在这里所做的只是使用逗号运算符,它会丢弃"%s"
并评估cascadeName
,所以这实际上只是:
std::cout << cascadeName;
答案 1 :(得分:0)
您不使用printf
类型语言(例如'%d'
,'%s'
,等)与ostreams,您只需使用operator<<()
对于要输出的类型,它会重载。
让timeFound()
返回它的输出:
std::string timeFound() {
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,80," %Y-%m-%dT%H:%M:%S",timeinfo);
eventCount++;
return buffer;
}
然后你想要更像的东西:
std::cout << cascadeName << ' ' << eventCount << ' ' << timeFound() << std::endl;