文件路径开头的C ++空间

时间:2014-10-16 10:12:56

标签: c++ printing cout

我有一个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文件。

2 个答案:

答案 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;