2017-05-08 45 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。很高興我能幫上忙。 –