在C ++中从格式化切换到非格式化输入

时间:2016-09-24 14:02:29

标签: c++ istream

我有一个输入文本文件。第一行有两个int个数字ab,第二行是一个字符串。我想使用格式化输入来执行file >> a >> b,然后使用未格式化的输入来逐个获取字符串的字符。在这两个步骤之间,我需要跳过第一行末尾的'\n'字符。我用了

  while(file.get()<=' ' && !file.eof());  // skip all unprintable chars
  if(!file.eof()) file.unget();           // keep the eof sign once triggered

使输入格式更灵活。用户现在可以使用任意数量的空行a,制表键b和/或空格键{{1}从字符串中分隔数字'\n''\t' - 他必须将数字' 'a分开。在Linux中读取从Windows复制的文本文件时,甚至没有问题,现在每一行都变为b

是否有"\r\n"函数执行相同的操作(跳过所有字符ifstream,直到达到下一个可打印字符或<=' ')? EOF函数似乎没有这样做。

1 个答案:

答案 0 :(得分:2)

是的,有:std::ws操纵者。它会跳过空格字符,直到找到非空格或到达流的末尾。它类似于scanf格式字符串中空格字符的使用。

实际上,在实际开始解析字符之前,格式化输入会使用它。

你可以这样使用它:

int x;
std::string str;
std::cin >> x >> std::ws;
std::getline(std::cin, str);
//...
//std::vector<int> vec;
for(auto& e: vec) {
    std::cin >> e;
}
std::getline(std::cin >> std::ws, str);