我正在编写这个c ++控制台程序,它必须在二进制文件中按名称搜索一堆人,并显示找到的记录的所有数据。问题是,当我搜索一个名称,例如第三或第四时,程序总是向我显示第一个名称。
您也可以在这些照片上看到问题:
void search_by_name()
{
{
depositor p_Info;
char name[50];
data_file.open("info.dat", ios::binary | ios::in);
if (!data_file)
{
cout << "Error while opening file!";
exit(1);
}
data_file.seekg(0 * sizeof(struct depositor), ios::beg);
data_file.read((char*)(&p_Info), sizeof(depositor));
cout << "\n\n* Please enter a name you would like to search: ";
cin.clear();
cin.ignore(2000, '\n');
cin.getline(name, 50);
while (p_Info.full_name == name)
cout << "" << endl;
cout << "/=====================================================/" << endl;
cout << "/========= Number: " << p_Info.numb << endl;
cout << "/========= Full name: " << p_Info.full_name << endl;
cout << "/========= Address: " << p_Info.address << endl;
cout << "/=====================================================/" << endl;
data_file.close();
system("pause");
}
}
答案 0 :(得分:1)
p_Info.full_name == name
这不是与C ++中的字符串进行比较的正确方法。
例如,使用strcmp(p_Info.full_name, name) == 0
或使用std::string
。
哦,是的,而且,我想,你想把这一行放在while循环中以及它现在的位置:
data_file.read((char*)(&p_Info), sizeof(depositor));
while循环应如下所示:
//while we didn't find the right one, continue reading
while(strcmp(p_Info.full_name, name) != 0)
data_file.read((char*)(&p_Info), sizeof(depositor));
答案 1 :(得分:0)
该函数只读取第一条记录(从文件的第0个字节到sizeof(depositor)
),但它永远不会读取从cin
读取存款人姓名的行之后的文件因此,它不可能从第一条记录以外的文件中获取任何数据。