1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ficheiro em C

Discussão em 'Programação' iniciada por skirk, 10 de Fevereiro de 2007. (Respostas: 14; Visualizações: 3278)

  1. skirk

    skirk Power Member

    Boas tenho uma duvida no seguinte, eu to a fazer um projecto de manipulacao de um sistema de cartao magnetico intra-escolar que permita carrega-lo, fazer debitos nos diferentes stios(bar,livraria,...) e num das opçoes precis guardar em ficheiros os dados de um determinado cartao bem como os seus ultimos movimentos. Esse sub-programa deve começar por pedir o numero ao utilizador e deopis cria um ficheiro de txt com o seguinte nome: (cartao_nºdo cartao), a mha duvida e como ek faco para cada numero de cartao criar um ficheiro diferente, o problema esta no nome com k vamos fazer o fopen...normalmente usa-se assim

    FILE *fich;
    fich=fopen("cartao_numero","w");

    mas eu kero k onde esta numero apareça o numero do cartao, conforme o numero k o utilizador introduza. ;)
     
  2. PandMonium

    PandMonium Power Member

    podes usar o sprintf() se quiseres para criar o nome do ficheiro.
    sprintf(filename, "cartao_%d", n_cartao);

    procura no google se tiveres duvidas ou ve as man pages se tiveres :p
     
  3. skirk

    skirk Power Member

    Como assim, em vez de usar fich=fopen("cartao_numero","w"); faco sprintf(filename, "cartao_%d", n_cartao); ??
     
  4. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    o 'sprintf' coloca-te na variável 'filename' o nome do ficheiro.
    depois fazes 'fopen(filename,"w");'
     
  5. skirk

    skirk Power Member

    ahh sim tou a ver...Ty ;)
     
  6. Eu tb estou a dsevenvolver uma aplicação destas, mas estou com duvidas na parte de alterar um cartão, tenho um cartão criado e quero alterar os dados do mesmo, alg pode dár umas dicas?

    Obg
     
  7. muddymind

    muddymind 1st Folding then Sex

    Abres o ficheiro em modo de leitura e les todo o ficheiro... depois alteras o q tiveres de alterar nos dados lidos...
    Finalmente voltas a abrir o ficheiro em modo de escrita (que vai substituir por completo o ficheiro) e voltas a escrever tudo...

    []
     
  8. skirk por acaso isso não é o projecto de IP 2006/2007 da EST Setubal? :-D
     
  9. skirk

    skirk Power Member

    é sim sr :p
     
  10. Neo4

    Neo4 Banido

    entao e se por exemplo tenho varias linhas cada uma com nome, password e data de login
    se quiser so mudar a data de login de um deles posso na leitura atribuir por exemplo a string Nome a todos os nomes ou tenho que ter uma por nome?!
     
    Última edição: 11 de Julho de 2007
  11. Neo4

    Neo4 Banido

    entao ninguem da aqui uma ajudinha ao je?
     
  12. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    não percebi a tua questão.
     
  13. MX+

    MX+ Power Member

    Sim tenta ser mais explicito na tua dúvida.
     
  14. Neo4

    Neo4 Banido

    ok desculpem,

    é assim eu tenho um ficheiro que em cada linha guarda os seguintes dados:
    Nome, Passord para o login, data de registo e pontuaçoes mais altas de jogos.

    o problema é que nao estou a conseguir por as pontuaçoes mais altas a escreverem no ficheiro, porque so quero mudar para o jogador em questao eu tentei isto, mas so da se so tiver 1 jogador no ficheiro...

    fp= fopen("Regis.txt", "r+");
    while(fscanf(fp, "%s %s %s %d %d %d", Nome2, Password, mes, &dia, &ano, &pont2) !=EOF)
    {
    if (strcmp(Nome2, Nome)==0 && pont2<=pont);
    fprintf(fp, "%s %s %s %d %d %d \n", Nome2, Password, mes, dia, ano, pont);
    fclose(fp);
    }


    o problema é que as strings so guardam os 1º dados, ou seja o 1º nome, a 1º password e a 1º data =S
     
  15. VuDu

    VuDu Power Member

    Num caso destes, acho que o comportamento ideal seria teres os dados em memória e escrever apenas para ficheiro no final do programa.
    Ou seja, a menos que seja especificamente pedido para o programa trabalhar on-the-fly, as alterações seriam todas feitas na memória.
    Por exemplo se tiverem
    Código:
    nome=alberto
    pass=blabla
    idade=34
    
    alterar a pass on-the-fly para uma de tamanho diferente é uma enorme dor de cabeça! Se a pass tiver o mesmo tamanho, é "naquela"...

    No vosso caso, devem de estar a trabalhar com listas ligadas, e cada struct deve de ter o nome, pass, etc... Ou seja, ao arrancar o programa terão de ler todos os ficheiros, criar a vossa estrutura em memoria com os conteúdos dos ficheiros e no final do programa (antes do return 0) escrever tudo para os ficheiros. ;)
    Assim, fazer alterações, consultas e escritas será banal, uma vez que está tudo em memoria.
    Isto tudo, porque os ficheiros não deixam de ser sequências lineares de bytes, e é uma dor de cabeça andar a ler linha-a-linha a tentar processar certas sequências de números e letras, assumindo que elas existem e estão correctas nos ficheiros, senão é outra dor de cabeça evitar que o programa rebente se o ficheiro não tiver os caracteres como o programa está à espera.

    Como alguém disse noutro tópico, bater código qualquer um sabe, agora programar, implementar estruturas de dados, etc... é outra conversa.
     
    Última edição: 16 de Julho de 2007

Partilhar esta Página