我正在尝试创建一个读取文件任意列的程序:
#include <iostream>
#include <limits>
#include <fstream>
#include <cstdlib>
int main(int argc, const char * argv[])
{
std::ifstream in_file("/tmp/testfile");
int n_skip = 2;
std::string tmpword;
while (in_file) {
if(n_skip < 0) {
throw "Column number must be >= 1!";
}
// skip words
while(n_skip > 0) {
in_file >> tmpword;
n_skip--;
}
in_file >> tmpword;
std::cout << tmpword << "\n";
in_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return 0;
}
但它总是打印第一列,为什么?
答案 0 :(得分:2)
第一次执行外部while
循环时,n_skip
设置为2.但是,执行时
while(n_skip > 0) {
in_file >> tmpword;
n_skip--;
}
n_skip
设置为0,永远不会重置为2.
添加一行
n_skip = 2;
行后
in_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
重置它。
答案 1 :(得分:0)
我明白了,我需要在每一行恢复n_skip
的值:
#include <iostream>
#include <limits>
#include <fstream>
#include <cstdlib>
int main(int argc, const char * argv[])
{
std::ifstream in_file("/tmp/testfile");
int n_skip = 2;
if(n_skip < 0) {
throw "Column number must be >= 1!";
}
std::string tmpword;
while (in_file) {
int n_skip_copy = n_skip;
// skip words
while(n_skip_copy > 0) {
in_file >> tmpword;
n_skip_copy--;
}
in_file >> tmpword;
std::cout << tmpword << "\n";
in_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return 0;
}