C++ std :: cout和字符串打印顺序错误

Tob*_*oby 2 c++ g++

我有一个使用g ++编译器在Linux上运行的简单程序:

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char **argv){
 fstream file;
 string s;
 file.open("sample/dates.dat", fstream::in);
 if(!file.good())
  return 0;
 getline(file, s);
 cout << s << "." << endl;
 return 0;

}
Run Code Online (Sandbox Code Playgroud)

编译:g++ -o test test.cpp.当我运行它时,在字符串s之前打印fullstop,而不是之后.有人知道为什么会这样吗?它很容易修复吗?

谢谢.

Cap*_*ous 6

如果字符串末尾有回车符,则在打印时会将输出位置移动到控制台行的开头.

#include <iostream>

int main()
{
    std::cout << "some line\r" << "." << std::endl;
    //                     ^^ carriage return
}
Run Code Online (Sandbox Code Playgroud)

  • 使用`hexdump`或类似实用程序执行文件的十六进制转储. (3认同)
  • @Toby根据经验,当您从unkwnown origin(Windows,Unix和MacOS)读取文本文件时,您应该以某种方式"规范化"行分隔符.一种方法是首先将`\ r \n`转换为`\n`(Windows转换为Unix格式),然后将剩余的`\ r`转换为`\n`(MacOS转换为Unix格式).然后,您可以仅使用`\n`作为行分隔符来处理所有行.这可能不是最有效的方法,但它是最简单的方法. (2认同)