与我正在搜索的结果不同

时间:2015-01-10 22:29:32

标签: c++

我正在编写这个c ++控制台程序,它必须在二进制文件中按名称搜索一堆人,并显示找到的记录的所有数据。问题是,当我搜索一个名称,例如第三或第四时,程序总是向我显示第一个名称。

您也可以在这些照片上看到问题:
http://i.stack.imgur.com/1HIss.png
http://i.stack.imgur.com/J7V0I.png

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");
    }
}

2 个答案:

答案 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读取存款人姓名的行之后的文件因此,它不可能从第一条记录以外的文件中获取任何数据。