如何返回文件中项目的索引.dat
How to return index of item in .dat file?
如何返回项目在.dat
文件中的位置?
在search()
函数中,我尝试在fractions.dat
文件中查找一个项目并将其返回给用户。但是,该函数始终返回 -2(返回的变量最初初始化为的值)。
if
语句执行,但似乎file.read(...)
没有将cur
设置为任何内容。
#include <iostream>
#include <fstream>
using namespace std;
struct Fraction
{
int num, den;
};
int search(fstream& file, Fraction* f);
int menu();
void proccessChoice(int i);
Fraction* readFrac();
Fraction* fracs[100];
int index;
string fileName = "fractions.dat";
fstream file(fileName, ios::in | ios::out | ios::binary);
int main()
{
if (!file)
{
cout << "Error opening file. Program aborting.n";
system("pause");
exit(1);
}
int choice;
do
{
choice = menu();
proccessChoice(choice);
} while(choice != 3);
system("pause");
return 0;
}
int menu()
{
int c;
cout << "1.Enter new fraction" << endl;
cout << "2.Find fraction location" << endl;
cout << "3.Quit" << endl;
cin >> c;
return c;
}
void proccessChoice(int i)
{
switch(i)
{
case 1:
{
cout << "Please enter a fraction to be stored: ";
fracs[index] = readFrac();
file.write(reinterpret_cast<char*>(fracs[index]), sizeof(Fraction));
/*cout << fracs[index]->num << "/" << fracs[index]->den ;*/
index++;
}
break;
case 2:
{
cout << "Please enter a fraction to find: ";
Fraction* fToFind = readFrac();
int i = search(file, fToFind);
cout << "The fraction is at position: "<< i << endl;
}
break;
}
}
int search(fstream& file, Fraction* f)
{
Fraction* cur = new Fraction();
int pos = -2;
if (!file)
{
cout << "Error opening file. Program aborting.n";
system("pause");
exit(1);
}
while(!file.eof())
{
file.read(reinterpret_cast<char *>(cur), sizeof(Fraction));
if((cur->num == f->num) && (cur->den == f->den))
{
cout << "nFrac found!" << cur->num << "/" << cur->num<<endl;
pos = file.tellg();
return pos;
}
}
return pos;
}
Fraction* readFrac()
{
Fraction* f = new Fraction();
char slash;
cin >> f->num >> slash >> f->den;
return f;
}
您不是从文件的开头开始搜索。你需要:
file.seekg( 0, std::ios::beg );
同样,我认为您在写入文件时不会附加到末尾。
file.seekp( 0, std::ios::end );
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- 数组索引的值没有增加
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- 在矢量中使用擦除时双重释放或损坏(快速顶部).如何擦除一个矢量的几个项目知道它们的索引?
- 有没有一种简单的方法可以在C++中获取特定索引之后向量中的所有项目?
- 从 boost::variant 中逐个索引获取项目,就像使用 std::variant 一样
- 无法从矢量中按索引擦除项目C++
- 使用 Cmake 的 Eclipse IDE 项目中的索引 Qt5
- 如何在C 中以给定索引列表中的项目插入项目
- 如何从QTreeView中的项目获取索引
- Eclipse (Juno) CDT 索引器:"Error while parsing..." Makefile 项目
- 如何返回文件中项目的索引.dat
- 为 Wt 列表模型中的项目编制索引
- 与排序相关的算法(将每个项目替换为排序排序中的索引)
- Qt:如何在任意索引(不是当前选定的项目)处获取QComboBox项目文本
- 对于大型C++项目,建议的 Eclipse CDT 配置是什么(索引器需要很长时间)
- 为c++项目的字符串文字编制索引