我有一个程序从文本文件中获取输入流,该文件包含由空格分隔的正整数。该文件只包含数字和abc
的一个实例,我的程序在继续从文件中读取数据之前应该忽略该实例。
这是我的代码而且不起作用
int line;
in >> line;
in.ignore(1, 'abc');
in.clear();
有人可以说明问题是什么吗?基本上,我想丢弃alpha输入,清除cin并继续从文件中读取,但我得到一个无限循环。
答案 0 :(得分:0)
此代码应该可以使用
我从输入流中得到三个部分,并将有用的部分放入stringstream
并从中读取
int part1, part2;
std::string abc;
in >> part1 >> abc >> part2;
std::stringstream ss;
ss << part1 << part2;
int line;
ss >> line
答案 1 :(得分:0)
您可以通过这种方式明确忽略任何字母字符:
#include <locale>
#include <iostream>
std::istream& read_number(std::istream& is, int& number) {
auto& ctype = std::use_facet<std::ctype<char>>(is.getloc());
while(ctype.is(std::ctype_base::alpha, is.peek())) is.ignore(1);
return is >> number;
}
int main() {
using std::string;
using std::cin;
using std::locale;
int number;
while(read_number(std::cin, number)) {
std::cout << number << ' ';
}
}
对于像“452abc def 23 11 -233b”这样的输入,这将产生“452 23 11 -233”。