【问题标题】:Why does << operator cut off characters with cout?为什么 << 运算符用 cout 截断字符?
【发布时间】: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 声誉:)

标签: c++ operators cout


【解决方案1】:

这似乎正在发生:
line 字符串末尾的字符包含 carriage return 字符。如果您的字符串是Hello World,将其与回车一起打印会导致光标返回H 字符。这意味着当您在那之后开始打印任何内容时,它将覆盖您的旧字符串。
为避免这种情况,您可能需要先打印endl

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 2015-12-20
    • 2013-09-23
    • 1970-01-01
    • 2018-10-25
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多