9

假设我有一个包含整数的文件,格式为

1 57 97 100 27 86 ...

假设我有一个输入文件流 fin 并且我尝试从文件中读取整数。

ifstream fin("test.txt");
int val;
fin>>val;

现在我在一个while循环中执行此操作,在某个时间段内,我想将我的文件指针恰好向后移动一个整数。也就是说,如果我的文件指针即将读取整数27fin>>val,我想移动文件指针,以便100在我这样做时它可以读取整数fin>>val。我知道我们可以使用fin.seekg(),但我只用它来按字符移动文件指针,而不是按整数移动。

可能这是一个幼稚的问题。但是有人可以帮我吗?

4

6 回答 6

4

您可以tellg在每次读取后使用来保存指针以供以后使用seekg

您还可以<<使用一个函数来实现和修改它,该函数还返回您每次前进的字符数。在哪里可以找到源代码operator<<不是我可以轻松帮助您的。

于 2013-10-10T15:49:02.940 回答
3

在您的情况下,它不是整数,而是表示数字的文本。因此,您必须逐个字符地向后移动,直到找到非数字的一 ( !isdigit(c))。

正如下面的一位评论者指出的那样,您也可以注意“减号”,以防您的数字可能为负数。

于 2013-10-10T15:38:51.640 回答
0

尝试以下操作:

#include <iostream>
#include <fstream>
#include <locale>

int main()
{
    std::ifstream fin("test.txt");
    int val;

    bool back = false;
    for (int i = 0; fin >> val;)
    {
        if (!back && val == 27)
        {
            while (i++ < 2)
                while (!std::isspace(fin.unget().rdbuf()->sgetc()));
            back = true;
        }
    }
}
于 2013-10-10T15:54:53.813 回答
0

第一个参数是文件名,第二个参数是数字索引,程序在索引处显示数字,然后显示前一个数字(从零开始计数)

#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>


int main(int argc, char *argv[]){
    if(argc != 3){
        std::cout<<"argument error!\n";
        return 1;
    }

    std::ifstream read;
    read.open(argv[1],std::ios::app);
    if( read.is_open() ){
        std::vector<int> numbers;
        int temp;
        while(read >> temp){
            numbers.push_back(temp);
        }

        std::cout<<"1) "<<numbers[atoi(argv[2])]<<"\n2) "<<numbers[atoi(argv[2]-1)]<<std::endl;

            read.close();

    }else {
        std::cout<<"file open error!\n";
        return 2;
    }

    return 0;
}
于 2013-10-10T15:56:06.970 回答
0

你可以看看istream::unget()

于 2013-10-10T15:41:19.510 回答
0
#include <fstream>
#include <iostream>
int main()
{

    ifstrem file("fileName.txt");
    char var=file.get()://now this will move file pointer one time forward
    /* Seekg(n,position) accept two arguments.The number of bits and position
    from where to move the file pointer
    if value of n is negative then file pointer will move back.
    */
    file.seekg(-1,ios::cur);//to move the file back by one bit from current position
    
    retur

n 0; }

于 2021-04-06T11:50:31.590 回答