2017-05-08 43 views
0

我真的很陌生,实际上,这是我的第一个项目,这是我第一次使用C++。C++控制台 - 按特定编号搜索客户端

我有这样的结构:

typedef struct { 
    char nome[50]; 
    char morada[100]; 
    char codpostal[8]; 
    char localidade[25]; 
    int telefone; 
    int nContribuinte; 
} CLIENTE; 

我使用这个f = fopen("PSI.dat", "wb");那里我一直保存的信息。这是我添加信息到它:

FILE *f; 
int i, x; 
CLIENTE Clt; 

// ler dados 
printf("   Nome: "); cin >> Clt.nome; 
printf("   Morada: "); cin >> Clt.morada; 
printf("  Cod-Postal: "); cin >> Clt.codpostal; 
printf("  Localidade: "); cin >> Clt.localidade; 
printf(" No Contribuinte: "); cin >> Clt.nContribuinte; 
printf("  Telefone: "); cin >> Clt.telefone; 

// gravar no ficheiro 
fwrite(&Clt, sizeof(Clt), 1, f); 
fclose(f); 

问题:如何搜索PSI.dat为现有Clt.nContribuinte用户要求在scanf("%d",&i);

+2

首先要做的就是放弃C-isms! 'FILE *','printf','fopen','typedef struct','char []'.. yikes。你正在使用哪一本C++书? –

+0

@BoundaryImposition是非常正确的。 –

+0

因为这是一个学校项目我有点使用这些...没有其他选择 –

回答

0

你想是这样的,你可能会需要稍微调整它。

这是一个C++解决方案,而不是C解决方案。 @ BoundaryImposition的评论是绝对正确的,并且需要重新考虑与您正在学习的语言的习语,表现力和设施相匹配的问题。

#include <fstream> 
#include <iostream> 
#include <string> 

struct Client { 
    std::string nome; 
    std::string morada; 
    std::string codpostal; 
    std::string localidade; 
    int telefone; 
    int nContribuinte; 
}; 

Client get_search_criteria() { 
    auto c = Client{}; 

    std::cout << "   Nome: "; 
    std::cin >> c.nome; 
    std::cout << "   Morada: "; 
    std::cin >> c.morada; 
    std::cout << "  Cod-Postal: "; 
    std::cin >> c.codpostal; 
    std::cout << "  Localidade: "; 
    std::cin >> c.localidade; 
    std::cout << " No Contribuinte: "; 
    std::cin >> c.nContribuinte; 
    std::cout << "  Telefone: "; 
    std::cin >> c.telefone; 

    return c; 
} 

int main() { 
    auto criteria = get_search_criteria(); 

    auto infile = std::ifstream{"PSI.dat"}; 
    int line; 
    while (infile >> line) { 
     if (line == criteria.nContribuinte) { 
      // do something 
     } 
    } 
} 

声明:我不经常写C++。

+1

这就是完美!我只是需要'while while循环来解决我的问题。一件小事,'line'必须是'int line;'cause'criteria.nContribuinte'是一个整数值。我得到的信息是找到的行号,并使用'fseek(f,i * sizeof(CLIENTE),SEEK_SET);'和'fread(&Clt,sizeof(CLIENTE),1,f);'得到信息。它工作:)谢谢队友 –

+0

固定使用int。避免fseek。很高兴我能帮上忙。 –