用c ++打印出文件的第n列

时间:2014-07-22 00:09:23

标签: c++ io

我正在尝试创建一个读取文件任意列的程序:

#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;
}

但它总是打印第一列,为什么?

2 个答案:

答案 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;
}