假设我有一个包含整数形式的文件
1 57 97 100 27 86 ...
假设我有一个输入文件流fin,我尝试从文件中读取整数。
ifstream fin("test.txt");
int val;
fin>>val;
现在我在while循环中执行此操作,在一段时间内,我想将我的文件指针正好移回一个整数。也就是说,当我执行27
时,我的文件指针即将读取整数fin>>val
,我想移动文件指针,以便在执行100
时它可以读取整数fin>>val
fin.seekg()
1}}。我知道我们可以使用{{1}}但我只使用它来按字符而不是整数来移动文件指针。
这可能是一个天真的问题。但有人可以帮帮我吗?
答案 0 :(得分:3)
在您的情况下,它不是整数,而是表示数字的文本。因此,您必须逐个字符向后移动,直到找到非数字字符(!isdigit(c)
)。
正如下面的一位评论者指出的那样,如果你的数字可能是负数,你也可以注意一个'减号'。
答案 1 :(得分:2)
您可以在每次阅读后使用tellg
保存指针,以便稍后使用seekg
。
您还可以执行<<
并使用一个函数对其进行修改,该函数还会返回每次前进的字符数。在哪里可以找到operator<<
的源代码并不是我可以轻松帮助您的地方。
答案 2 :(得分:0)
您可以查看istream::unget()
答案 3 :(得分: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;
}
}
}
答案 4 :(得分: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;
}
答案 5 :(得分: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; }