我有一个输入文本文件。第一行有两个int
个数字a
和b
,第二行是一个字符串。我想使用格式化输入来执行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
函数似乎没有这样做。
答案 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);