如何将文件指针移回一个整数
How to move file pointer back by one integer?
>假设我有一个包含整数的文件,格式为
1 57 97 100 27 86 ...
假设我有一个输入文件流 fin,我尝试从文件中读取整数。
ifstream fin("test.txt");
int val;
fin>>val;
现在我在一段时间循环中执行此操作,在一段时间内,我想将文件指针正好向后移动一个整数。也就是说,如果我的文件指针即将读取整数27
当我执行fin>>val
时,我想移动文件指针,以便它可以在我执行fin>>val
时读取整数100
。我知道我们可以使用它fin.seekg()
但我使用它只是按字符而不是整数移动文件指针。
可能这是一个幼稚的问题。但是有人可以帮我吗?
您可以在每次读取后使用 tellg
来保存指针,以便稍后与seekg
一起使用。
您还可以获取<<
的实现并使用一个函数对其进行修改,该函数还返回您每次前进的字符数。在哪里可以找到operator<<
的源代码不是我可以轻松帮助您的事情。
在您的情况下,它不是一个整数,而是一个表示数字的文本。因此,您将不得不逐个字符向后移动,直到找到非数字字符(!isdigit(c)
(。
正如下面的一位评论者指出的那样,如果您的数字可能是负数,您还可以注意"减号"。
第一个参数是文件名,第二个参数是数字索引,程序在索引处显示数字,然后显示前一个数字(从零开始计数(
#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;
}
尝试以下操作:
#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;
}
}
}
你可以
看看istream::unget((
#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;}
相关文章:
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 如何将一个数组值合并为一个整数c++
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我可以将迭代器递增一个整数吗?
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 为什么将两个浮点数相加会得到一个整数C++?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 按升序输出整数时,将最后一个整数放在新行上
- 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字的总和
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 给定一个整数,将其表示为平方和
- c++interpret_cast是一个整数
- 以最少的步骤将给定整数转换为另一个整数
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 我需要将字符串(例如 A5)转换为一个字符串 (A) 和一个整数 (5)
- 如何交替从文件中获取一行数据和一个整数?
- 如何让这个C++代码从用户那里读取五个整数而不是一个整数?