为什么在使用cout时,<< 运算符会截断字符?

5

我在while循环中使用std :: getline,并使用cout打印输出,发现当我打印输出时,我的行开头被截断:

正常工作:

std::string line;
while(std::getline(csv, line)) {
 std::cout << line << std::endl
}

预期效果未能实现,会切掉我这行文字的前两个字符。

std::string line;
while(std::getline(csv, line)) {
 std::cout << line << "  " << std::endl
}

我以前从没注意到这种行为,为什么现在会发生呢?


从上面的例子中,你怎么知道是cout有问题而不是line实际上缺少了预期的字符? - pickypg
因为我使用了printf(“%s \ n”,line.c_str());并得到了预期的行。而且我添加的文本“ ”替换了我的字符串的开头, - user2089851
2
我认为你可能已经打印了回车符,这导致你的“”替换了字符串的开头。 - atoMerz
1
你说得对,数据来自Windows机器,getline会获取回车符但不会获取换行符。然后我稍后会覆盖它。 - user2089851
1
@AtoMerZ - 你可能想把你关于“回车被打印,然后两个空格覆盖实际字符的问题”的评论作为答案发布。因为这似乎是作者在他上面的评论中所说的问题。将其作为答案发布将使这个问题更有用,并且也会增加你在SO上的声誉 :) - goldenmean
显示剩余2条评论
1个回答

1
这似乎是发生的情况:
你的line字符串末尾的字符包含回车符。如果你的字符串是Hello World,在它后面加上一个回车符会使光标返回到H字符处。这意味着当你开始打印任何东西时,它将覆盖你旧的字符串。
为了避免这种情况,你可能需要在任何其他内容之前打印endl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接