1
resposta

Contador que lê dados em um txt

Olá meus casas, estou desenvolvendo um projeto para a facul em C de um programa gerencial, e uma das funções a serem aplicadas é registrar clientes/funcionários e cada um ter um id que é registrado no txt e deve ser automaticamente ao registrar uma nova pessoa. Tentei de alguns jeitos e talvez a forma mais simples para minha cabeça limitada seja contar quantas vezes o "ID cliente" aparece para assim atualizar o contador. Mas preciso ajuda para tal. Por enquanto eu escrevi apenas o código abaixo para ler todas as palavras de um arquivo, mas preciso de ajuda para ler apenas o ID cliente. Vou deixar aqui o código usado para registrar e o para ler as palavras. Aceito com muito agrado outras maneiras de fazer essas funções e críticas fortes e construtivas. Muito obrigado. (O contadoClientes só funciona em uma sessão, então se o programa for resetado ele começa do 1 novamente).

void cadastra_clientes() {
    setlocale(LC_ALL,"portuguese");
    char nome_cliente[20];
    char c, letra = '\n';
    int vezes;

    int opc_cadastro;

        if(contadorClientes < maxClientes){

        do{
            FILE *arq = fopen("arquivo1.txt","w");

            if(arq == NULL){
                printf("\nErro: não foi possível abrir o arquivo.");
            }else{
                system("cls");
            printf("CADASTRO DE CLIENTES\n");
            printf("------------------\n\n");
             while(fscanf(arq, "%d", contadorClientes) != EOF) {
            printf("Cliente %d:\n\n", contadorClientes++);
            fprintf(arq, "\nCliente %d:\n\n", contadorClientes++);}

            fflush(stdin);
            printf("\nDigite o nome do cliente: ");
            gets(clientes[contadorClientes].nome_cliente);
            fputs(clientes[contadorClientes].nome_cliente, arq);
            fprintf(arq, "\n");

            fflush(stdin);
            printf("\nDigite o email do cliente: ");
            gets(clientes[contadorClientes].email_cliente);
            fputs(clientes[contadorClientes].email_cliente, arq);
            fprintf(arq, "\n");

            fflush(stdin);
            printf("\nDigite o CPF ou CNPJ do cliente: ");
            gets(clientes[contadorClientes].cpf_cliente);
            fputs(clientes[contadorClientes].cpf_cliente, arq);
            fprintf(arq, "\n");

            fflush(stdin);
            printf("\nDigite o telefone do cliente: ");
            gets(clientes[contadorClientes].tel_cliente);
            fputs(clientes[contadorClientes].tel_cliente, arq);
            fprintf(arq, "\n");
            }

             fprintf(arq,"\n------------------------------------------------------------\n\n");
            printf("\n\nCliente %d cadastrado com sucesso!",contadorClientes+1);

            fclose(arq);

            contadorClientes++;

            printf("\n\nDeseja cadastrar mais um registro? 1-Sim/2-Não\n");
            scanf("%d", &opc_cadastro);

            if(opc_cadastro==2){
               menu_principal_vendas();

            }

            if(contadorClientes == maxClientes){
                printf("\n\n A capacidade de registros de alunos esgotou.");

                system("cls");
                system("exit");
            }


        }while(opc_cadastro == 1 && contadorClientes < maxClientes);    

        }else{
             printf("\n\n A capacidade de registros de alunos esgotou.");
             system("cls");

        }

    }
void ler(){



  FILE *fp = fopen ("arquivo2.txt","r");

  if (fp == NULL) {
    //Sai do programa caso o arquivo não tenha sido aberto
    printf("Erro ao tentar abrir o arquivo.");

  } else {
    int ch = 0;
    int linhas = 0;

    linhas++;

    //Efetua a contagem de linhas lendo o arquivo e procurando a quebra de linha
    while (!feof(fp)) {
      ch = fgetc(fp);

      if (ch == '\n') {
        linhas++;
      }
    }

    //Fecha o arquivo
    fclose(fp);

    //Exibe a quantidade de linhas
    printf("Quantidade de linhas: %d\n",linhas);


  }
}
1 resposta

Olá Gabriel!

Pelo que entendi, você está desenvolvendo um programa em C para registrar clientes/funcionários em um arquivo de texto e atribuir um ID automático a cada pessoa registrada. Você já escreveu um código para ler todas as palavras de um arquivo, mas precisa de ajuda para ler apenas o ID do cliente.

Uma forma de resolver esse problema é utilizar a função fscanf para ler apenas o ID do cliente do arquivo. Você pode fazer isso da seguinte maneira:

void ler_id_clientes() {
    FILE *arq = fopen("arquivo1.txt", "r");
    int id_cliente;

    if (arq == NULL) {
        printf("Erro ao abrir o arquivo.\n");
    } else {
        while (fscanf(arq, "Cliente %d:", &id_cliente) != EOF) {
            printf("ID do cliente: %d\n", id_cliente);
        }

        fclose(arq);
    }
}

Nesse código, utilizamos a função fscanf para ler o ID do cliente no formato "Cliente %d:". A cada iteração do loop, o valor do ID é armazenado na variável id_cliente e é exibido na tela. O loop continua até que não seja possível ler mais nenhum ID do arquivo.

Espero que essa solução seja útil para você. Se tiver mais alguma dúvida, é só me dizer! Espero ter ajudado e bons estudos!