因为我的文件是这样的:字1 2字1 2 3 4 5 6 ...
int n,e;
string s;
ifstream myfile("input.txt");
因此我认为这是一种愚蠢的方法,可以使用字符串来避免问题,并将内容放入字符串然后取数字,就像这样:
myfile >> s;
myfile >> n;
myfile >> e;
答案 0 :(得分:0)
您可以将所有数据作为字符串获取,并尝试将数据转换为try {} catch () { }
块中的整数。如果数据是真实的整数,则在try部分执行操作,否则如果代码转到catch并且不在catch中执行任何操作。
答案 1 :(得分:0)
当您正在读取文件时,所有数据都被视为字符串。您必须检查字符串是否为数字。这是一种将字符串转换为整数的方法(如果这是一个整数):atoi() function 但要小心,你必须传递一个c字符串。
答案 2 :(得分:0)
哎呀它已经解决了。值得一提的是,还有可能:
从使用运算符>
或peek()流中的下一个字符而不读取它以决定是忽略它还是使用运算符>>
请注意' - '这不是一个数字,但可能是一个整数的标志。
这是一个小例子:
int c, n, sign=1;
ifstream ifs("test.txt", std::ifstream::in);
while (ifs.good() && (c=ifs.peek())!=EOF ) {
if (isdigit(c)) {
ifs >> n;
n *= sign;
sign = 1;
cout << n << endl;
}
else {
c=ifs.get();
if (c == '-')
sign = -1;
else sign = 1;
}
}
ifs.close();
这不是最高效的方法,但它的优点是只能从流中读取,没有中间字符串和内存管理。
答案 3 :(得分:0)
您可以执行以下操作
int num = 0;
while(myfile >> num || !myfile.eof()) {
if(myfile.fail()) { // Number input failed, skip the word
myfile.clear();
string dummy;
myfile >> dummy;
continue;
}
cout << num << endl; // Do whatever necessary with the next number read
}