Lucas, Eduardo, Igor Cotta
By: a guest | Mar 18th, 2010 | Syntax:
C | Size: 1.93 KB | Hits: 115 | Expires: Never
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
int gravarNome (char **posicao, char *nome, int tamanho, int indice);
int main ()
{
char *contatos[MAX], nome[81];
int i=0, j, length;
do
{
/*
Solicita a entrada de um nome e,
com o auxilio de fgets(), "trava"
a digitaçao em apenas 80 caracteres,
e grava a string recem-digitada em um
vetor auxiliar "nome"
*/
printf("Digite o nome ou tecle ENTER para finalizar: ");
fgets(nome, 80, stdin);
/*
Mede o nome inserido com o auxilio
de strlen(). Em nossos testes, uma string
vazia sempre tem length=1. No caso,
strings com pelo menos 1 caracter tem
length 2 ou mais. Se a string for vazia,
este processo é ignorado
*/
length = strlen(nome);
if ( i == MAX ) break; //a quantidade de nomes já atingiu o limite
else if ( length > 1 )
/*
gravarNome recebe como entradas:
-> &contatos[i] = o endereço de memoria
da variável onde o nome será¡ armazenado
-> nome = o nome a ser copiado para o vetor
"contatos"
-> length = será¡ usado na alocaçao de memoria
do contato
-> i = representa o indice do vetor de strings
*/
i = gravarNome(&contatos[i], nome, length, i);
} while ( length != 1);
for (j=0; j<i; j++)
printf("%i - %s", j+1, contatos[j]);
return 0;
}
int gravarNome (char **posicao, char *nome, int tamanho, int indice)
{
/*
Esta funçao recebe:
1) o endereço de memoria onde o nome será¡ armazenado no vetor de strings;
2) o nome que será armazenado;
3) o seu tamanho;
4) sua posiçao no vetor;
Ela realizará¡ a alocaçao de memoria necessária para se armazenar
o nome e então o copiará¡ para o lugar adequado. Apos isso,
devolverá¡ a posiçao do proximo endereço do vetor.
*/
*posicao = (char *) malloc(tamanho);
strcpy(*posicao, nome);
return indice+1;
}