Introdução à linguagem C - Parte IV

Nesta continuação da maravilhosa série sobre a linguagem C, apresentaremos o uso de arquivos textos e binários. Como declará-los? Como abrí-los? Como usá-los? São algumas das perguntas que teremos respondidas aqui!

[ Hits: 76.609 ]

Por: Ricardo Rodrigues Lucca em 14/07/2003 | Blog: http://aventurasdeumdevop.blogspot.com.br/


Exemplo



Aqui está um exemplo de um sistema de cadastro utilizando arquivos. Nele podemos inserir e pesquisar por um cadastro. A pesquisa pelo cadastro é feita informando o nome. Esse nome precisa ser exatamente igual ao nome que poderá ser encontrado no arquivo, pois o sistema é "case sensitive". Se quiserem podem tirar usando toupper ou tolower, mas não me dei ao trabalho. Aqui está o código comentado:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> //necessário somente pro system :(

//TAM_MAX é o tamanho máximo pro vetor de nomes
#define TAM_MAX 30


void insere(char nome[TAM_MAX], int idade)
{
   FILE *fd;  // declaração de um ponteiro do tipo arquivo

   fd = fopen("teste123","a"); //abre o arquivo(teste123) como anexação

   fprintf(fd, "%s\n", nome); //escreve nome numa linha de fd
   fprintf(fd, "%d\n", idade);//escreve idade na linha seguinte

   fprintf(stdout, "\nNome %s de Idade %d inserido!\n", nome, idade); //escreve na tela
  
   fclose(fd); //fecha o arquivo

   getchar(); getchar();
   //limpa o buffer e espera o usuario pressionar uma tecla
}

void pesquisa(char pesq[])
{
   FILE *fd; //declara fd do tipo arquivo, poderia ser global né?
   char linha[TAM_MAX];
   int idade, checa=0;

   fd = fopen("teste123","r"); //abre o arquivo

   //enquanto não chegar no final do arquivo pega a linha do arquivo e
   //coloca na variavel "linha". Depois passa pro if...
   while ((fscanf(fd,"%s", linha))!=EOF)
      if (!strcmp(linha, pesq)) //checa-se as 2 strings sao iguais
      {
         printf("\nNome: %s", linha);
         fscanf(fd,"\n%d", &idade);//pula uma linha e pega a idade
         printf("\nIdade: %d", idade);
         fscanf(fd,"\n"); //posiciona cursor na próxima linha
         checa=1;
      }
      else
         fscanf(fd,"\n\n"); //se nome não for o procurado, pula pra 2ª linha depois da atual
   if (checa==0) printf("Cadastro inexistente!\n");
   getchar(); getchar(); //espera o usuario teclar algo

   fclose(fd); //fecha arquivo
}

int main(void)
{
   int op,idade;
   char nome[TAM_MAX];
  
        //aqui é uma espécie de menuzinho
   while (op!=3)
   {
      system("clear"); //limpar tela
      printf("1 -> Insere\n");
      printf("2 -> Pesquisa\n");
      printf("3 -> Sair\n\n");
      printf("Digite a opção: ");
      scanf(" %d", &op);
      switch (op)
      {
         case 1: {
               printf("Digite o nome: ");
               scanf("%s", nome);
               printf("Digite a idade: ");
               scanf(" %d", &idade);
              
               insere(nome, idade);
            } break;
         case 2: {
               printf("Digite o nome a pesquisar: ");
               scanf(" %s", nome);
               pesquisa(nome);
            } break;
         case 3: break;
         default: {
                printf("Opção invalida!");
                getchar(); getchar();
             };
      }      
   }
  
   return(0);
}
Página anterior     Próxima página

Páginas do artigo
   1. Começando
   2. Abrindo/Fechando arquivos
   3. E/S de arquivos
   4. Exemplo
   5. Funções adicionais
   6. Dados de arquivos
   7. Exemplo 2
Outros artigos deste autor

VIM avançado (parte 1)

Introdução à linguagem C - Parte III

Linux Básico - Parte I

Linux Básico - Parte II

VIM avançado (parte 2)

Leitura recomendada

Introdução à linguagem C - Parte I

Mais sobre recursividade em C/C++

O ? Alternativo em C/C++

Liberando Memória ajustando o Tamanho das Strings em C

Inteiros e Strings na linguagem C

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts