Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junior-jp

[Resolvido] Inserir valores numa struct! como?

Recommended Posts

Bom galerinha meu problema é esse! Tenho um vetor com N_AMIZADES = 20 posições! Eu quero testar se o vetor estiver cheio! Retornar 0. E se o email nao estiver cadastrado no vetor...inserir e retornar 1.

* Objetivo: Função que cadastra um amigo.

* Entrada: o email de um usuario (email) e o email de seu novo amigo (emailDoAMigo)

* e um vetor de amizades (amizades)

* Retorno: 0 se vetor estiver cheio

* 1 se inserido com sucesso

* 2 se a amizade ja existir

* Saida: nenhuma

*/

 

typedef struct {

char email [50];

char emailDoAmigo [50];

int ocupado;

}tAmizade;

int adicionaAmigo(char email[], char emailDoAmigo[], tAmizade amizades[N_AMIZADES]){

 

int i=0;

 

for (i=0; i<N_AMIZADES-1;i++){

if (sizeof(amizades[N_AMIZADES]) == N_AMIZADES-1){

return 0;

}else if ((strcmp(amizades.email,email)==0) && (strcmp(amizades.emailDoAmigo,emailDoAmigo)==0 )){

return 2;

} else if ((strcmp(amizades.email,email)!=0) && (strcmp(amizades.emailDoAmigo,emailDoAmigo)!=0 )&& (amizades.ocupado== NAO)){

strcpy(amizades.email, email);

strcpy(amizades.emailDoAmigo, emailDoAmigo);

amizades.ocupado = SIM;

return 1;

}

for(i=0;i< N_AMIZADES-1;i++){

 

 

printf("\n\n%s %s %d", amizades.email,amizades.emailDoAmigo,amizades.ocupado);}

}

 

}

Isso foi o que eu fiz...mas quando rodo o ultimo for...ele não mostra o que eu acabei de inserir! Ou seja, não tá inserindo nada no vetor! E tb não retorna 0 mesmo se existirem mais indices do q o previsto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se isso resolve:

 

 

typedef struct{	char email [50];	char emailDoAmigo [50];	int ocupado;} tAmizade;int adicionaAmigo(char email[], char emailDoAmigo[], tAmizade amizades[N_AMIZADES]){	int i;	for(i = 0; i < N_AMIZADES; i++)	{		// Vamos checar os ocupados para verificar se já temos esta amizade		if(amizades[i].ocupado == SIM)		{			if((strcmp(amizades[i].email,email)==0) && (strcmp(amizades[i].emailDoAmigo,emailDoAmigo)==0 ))				return 2;		}	}	// Se chegou até aqui, é porque a amizade ainda não existe	for(i = 0; i < N_AMIZADES; i++)	{		// Procurar a primeira amizade não ocupada		if(amizades[i].ocupado == NAO)		{			strcpy(amizades[i].email, email);			strcpy(amizades[i].emailDoAmigo, emailDoAmigo);			amizades[i].ocupado = SIM;			return 1;		}	}	// Se passou todo o loop, é porque todas as amizades estão marcadas como	// ocupado == SIM	return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caras, não consigo entender oq faz esse terceiro parâmetro da função: tAmizade amizades[N_AMIZADES], tipo entendi que ele ta criando uma variável da struct direto dentro da função, ou seja, ela só vai ser mexida lá dentro desta função né? Mas o que eu tenho que passar pra função?

 

AdicionaAmigo(email, emailAmigo, ?);

Compartilhar este post


Link para o post
Compartilhar em outros sites
Caras, não consigo entender oq faz esse terceiro parâmetro da função: tAmizade amizades[N_AMIZADES],

 

Lé o código com mais atenção: se ele ta passando o lugar pra armazenar as structs,deve ser porque é uma variavel local em alguma funcao que nao esta ali...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia o código,groove:

 

int adicionaAmigo(char email[], char emailDoAmigo[], tAmizade amizades[N_AMIZADES])
{
int i;
for(i = 0; i < N_AMIZADES; i++)

 

O que está sendo passado é um ARRAY e não uma struct.

N_AMIZADES é o tamanho do array.

A declaração dele é a mesma coisa que int adicionaAmigo(char email[],char emailDoAmigo[],tAmizade amizades[],int N_AMIZADES).

 

 

Eu mudaria o código para

int posFree = -1;
for(i = 0; i < N_AMIZADES; i++) {
	if(amizades[i].ocupado == SIM) {
		if((strcmp(amizades[i].email,email)==0) && (strcmp(amizades[i].emailDoAmigo,emailDoAmigo)==0 ))
			return 2;
	} else {
		if (posFree < 0) posFree = i;
	}
}

if (posFree > -1) {
	strcpy(amizades[posFree].email, email);
	strcpy(amizades[posFree].emailDoAmigo, emailDoAmigo);
	amizades[posFree].ocupado = SIM;
	return 1;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora clareou isis, estou estudando sobre como passar structs inteiras e por ponteiro para funções :D

Bacana teu código, só faltou retornar quando estiverem todas as posições do vetor cheias, mas um return(0) no final, depois de tudo ali resolveria né?

Uma coisa, agora que estou fazendo uns programas que tem mais funções juntas, fico em dúvida de onde criar a variável de uma determinada struct, se crio sempre global, ou dentro da função main(), ou dentro da função que chama o menu, pode dar uma dica? vlws ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

P/ falar a verdade, nem o bagulho de busca deveria estar nessa funcao,ja que o nome dela eh AdicionaAmigos...

Desse jeito você teria uma funcao pra ver se o array esta cheio (retorna -1 se estiver cheio e o indice da proxima posicao vazia se tiver lugar), outra pra adicionar e uma pra buscar elemento repetido...

 

O programa é teu.você tem que ver onde fica melhor a variável...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.