【发布时间】:2013-02-27 05:39:06
【问题描述】:
我在 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实际上缺少预期的字符? -
因为我使用了 printf("%s\n", line.c_str());并得到了预期的线路。我添加的文本“”也替换了字符串的开头,
-
我认为您可能打印了回车符,这会导致您的
" "替换字符串的开头。 -
你是对的,数据来自 Windows 机器,getline 使用回车而不是换行。然后我稍后再覆盖它。
-
@AtoMerZ - 您可能不想将“回车打印然后两个空格覆盖实际字符......”的评论作为答案。因为这似乎是作者在上面的评论中所说的问题。把它作为一个答案会让这个 qn.更有用,也能为你赢得一些 SO 声誉:)