Share Pastebin
Guest
Public paste!

Lucas, Eduardo, Igor Cotta

By: a guest | Mar 18th, 2010 | Syntax: C | Size: 1.93 KB | Hits: 115 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX 1000
  6.  
  7. int gravarNome (char **posicao, char *nome, int tamanho, int indice);
  8.  
  9. int main ()
  10. {
  11.         char *contatos[MAX], nome[81];
  12.         int i=0, j, length;
  13.        
  14.         do
  15.         {
  16.                 /*
  17.                         Solicita a entrada de um nome e,
  18.                         com o auxilio de fgets(), "trava"
  19.                         a digitaçao em apenas 80 caracteres,
  20.                         e grava a string recem-digitada em um
  21.                         vetor auxiliar "nome"
  22.                 */
  23.                 printf("Digite o nome ou tecle ENTER para finalizar: ");
  24.                 fgets(nome, 80, stdin);
  25.                
  26.                 /*
  27.                         Mede o nome inserido com o auxilio
  28.                         de strlen(). Em nossos testes, uma string
  29.                         vazia sempre tem length=1. No caso,
  30.                         strings com pelo menos 1 caracter tem
  31.                         length 2 ou mais. Se a string for vazia,
  32.                         este processo é ignorado
  33.                 */
  34.                 length = strlen(nome);
  35.                 if ( i == MAX ) break; //a quantidade de nomes já atingiu o limite
  36.                 else if ( length > 1 )
  37.                         /*
  38.                                 gravarNome recebe como entradas:
  39.                                         -> &contatos[i] = o endereço de memoria
  40.                                         da variável onde o nome será¡ armazenado
  41.                                         -> nome = o nome a ser copiado para o vetor
  42.                                         "contatos"
  43.                                         -> length = será¡ usado na alocaçao de memoria
  44.                                         do contato
  45.                                         -> i = representa o indice do vetor de strings
  46.                         */
  47.                         i = gravarNome(&contatos[i], nome, length, i);
  48.         } while ( length != 1);
  49.        
  50.         for (j=0; j<i; j++)
  51.                 printf("%i - %s", j+1, contatos[j]);
  52.                
  53.         return 0;
  54. }
  55.  
  56. int gravarNome (char **posicao, char *nome, int tamanho, int indice)
  57. {
  58.         /*
  59.                 Esta funçao recebe:
  60.                         1) o endereço de memoria onde o nome será¡ armazenado no vetor de strings;
  61.                         2) o nome que será armazenado;
  62.                         3) o seu tamanho;
  63.                         4) sua posiçao no vetor;
  64.                 Ela realizará¡ a alocaçao de memoria necessária para se armazenar
  65.                 o nome e então o copiará¡ para o lugar adequado. Apos isso,
  66.                 devolverá¡ a posiçao do proximo endereço do vetor.
  67.         */
  68.         *posicao = (char *) malloc(tamanho);
  69.         strcpy(*posicao, nome);
  70.  
  71.         return indice+1;
  72. }