Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Olá pessoal, boa tarde, sou novo aqui, sem mais delongas!!

 

Estou criando um trabalho da facul, o problema é o seguinte preciso que ele cadastre 5 contatos, já descri o programa inteirinho, mas como sou perfeccionista, o programa deve gerar um código único e automático pro usuário no momento do cadastro, setei la nas variaveis 5 espaços na memoria para 5 cadastros, só que o codigo começa em 0, resumindo meu programa vai ter 5 contatos cadastrados, mas apenas com 4 codigos, no caso começando o primeiro do 0, tem como manipular ele de forma que comece no 1 e assim por diante ? estou deixando o print

 

Desde já, obrigadooooo galeraa!!! 

CODIGO.png

PROGR.png

  • Obrigado 1
Link para o post
Compartilhar em outros sites

Os códigos são de acordo com os índices [0,1...,4] do vetor.

Para minimizar as mudanças do programa adicione a expressão (seq + 1) só para exibição.

 

 

  • Obrigado 1
Link para o post
Compartilhar em outros sites

@zZDuzaaxC      a variável  seq é o contador que vai apontar  para qual posição do vetor de struct  onde armazenar os dados , então inicialize essa variável com o valor 1 logo no início   assim os dados serão armazenados a partir da segunda posição , pois a primeira é a posição zero , e nos loop's onde for  pesquisar no vetor comece a partir da segunda posição também  .

  • Obrigado 1
Link para o post
Compartilhar em outros sites

@Mauro Britivaldo  Mauro boa noite, desculpa parece uma formula boa, onde eu inseriria essa formula, na verdade em que momento para a exibição sair em 1 

 

adicionado 7 minutos depois

@devair1010  Boa noite, obrigado por questionar, então se eu iniciar em 1 essa variavel, quando meus contatos chegar no 5 cadastro e ultimo, ele irá dar erro pois é seguinte, sempre ira ter o espaço 0, ele estará nulo mais existira, o espaço 5 não, pois se contarmos de 0 a 4, dará um total de 5 espaços

 

A não ser que seja de outra forma que queira me dizer, poderia explicar ? 

  • Curtir 1
Link para o post
Compartilhar em outros sites

@Mauro Britivaldo  Mauro fiz da forma que citou, não sei se está certo, a principio deu certo, mas consigo apenas cadastra 1 contato, depois o codigo me da AGENDA CHEIA, esse alerta teria que dar apos o 5 cadastro 

CODIGO.png

adicionado 1 minuto depois

@devair1010 É Devair foi o que eu pensei, fiz isso de primeira, ficou perfeito, mas no caso eu estaria acumulando lixo de memoria, mas ficaria perfeito demais 

  • Curtir 1
Link para o post
Compartilhar em outros sites

@zZDuzaaxC       se você puder postar seu código , e em forma de texto , seria mais fácil ajudar ,  e use o botão  <>

barap.jpg.12ec30090f6a665e1070508a12ab5d07.jpg

que está desenhado lá na barra de ferramentas da janela de postar, para que seu código não fique faltando nenhum caractere e ser mais fácil de copiar e colar no editar do compilador para testarmos .

Link para o post
Compartilhar em outros sites

@devair1010

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

struct contatos{
	int codigo;
	char nome[30], telefone [15], email [40];
	
};

int main () {
	
	int escolha, seq = 0, i;
	struct contatos cliente[5];
	
	do{
		
		setlocale(LC_ALL, "Portuguese");
		printf ("'''''''' M E N U '''''''' \n\n");
		printf ("Escolha á Opção 1 para CADASTRAR\n");
		printf ("Escolha á Opção 2 para LISTAR\n");
		printf ("Escolha á Opção 0 para ENCERRAR\n\n");
		scanf ("%d", &escolha);
		fflush (stdin);
		system("cls");
		
		switch(escolha){
			case 1:
				if(seq <=0){
					printf ("CADASTRO DE CONTATOS\n\n");
					printf ("Código: %d\n", seq);
					printf ("Informe o nome:\n");
					fgets  (cliente[seq].nome, 30, stdin);
					fflush(stdin);
									
					printf ("Informe o telefone:\n");
					fgets  (cliente[seq].telefone, 15, stdin);
					fflush(stdin);	
								 
					printf ("Informe o E-mail:\n");
					fgets  (cliente[seq].email, 50, stdin);
					fflush(stdin);
					system("pause");
					system("cls");
					
					seq++ ;
				} else {
					printf ("******AGENDA CHEIA!****** \n\n");
					system("pause");
					system("cls");
					
				}	
			break;
		
			case 2:
				if(seq ==0){
					printf ("******AGENDA VAZIA!****** \n\n");
					system("pause");
				} else {
					printf ("LISTA DE CONTATOS\n\n");
					
						for (i=0; i<seq; i++){
							printf ("Código: %d\n", i);
							printf ("Nome: %s", cliente[i].nome);
							printf ("Telefone: %s", cliente[i].telefone);
							printf ("E-mail: %s\n", cliente[i].email);
							system("pause");
							system("cls");
					}	
				}
				break;
		
			case 0: 
				printf ("ENCERRANDO O PROGRAMA!\n\n");
						system("pause");
				break;
				
		
			default: 
				printf ("ERRO! OPÇÃO INVÁLIDA! \n\n");
							 	
		}
		
	}while (escolha !=0);
	
	return(0);
}

 

  • Amei 1
Link para o post
Compartilhar em outros sites

@zZDuzaaxC     no case 2 , listar , na hora de escrever o valor do código coloque o valor com uma unidade a mais :

e seu código poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct contatos       {
    int  codigo       ;
    char nome     [30],
         telefone [15],
         email    [40];
};
int main(){
    setlocale(LC_ALL, "Portuguese");
    int escolha, seq = 0, i;
    struct contatos cliente[5];
    do{
        printf ("'''''''' M E N U '''''''' \n\n");
        printf ("Escolha á Opção 1 para CADASTRAR\n");
        printf ("Escolha á Opção 2 para LISTAR\n");
        printf ("Escolha á Opção 0 para ENCERRAR\n\n");
        fflush (stdin);
        scanf ("%d", &escolha);
        system("cls");
        switch(escolha){
        case 1:
            if(seq < 5 ){
                printf ("CADASTRO DE CONTATOS\n\n");
                printf ("Código: %d\n", seq+1);
                printf ("Informe o nome: ");
                fflush (stdin);
                fgets  (cliente[seq].nome, 30, stdin);
                cliente[seq].nome[strlen(cliente[seq].nome)-1]='\0';
                fflush(stdin);
                printf ("Informe o telefone: ");
                fgets  (cliente[seq].telefone, 15, stdin);
                cliente[seq].telefone[strlen(cliente[seq].telefone)-1]='\0';
                fflush(stdin);
                printf ("Informe o E-mail: ");
                fgets  (cliente[seq].email, 50, stdin);
                cliente[seq].email[strlen(cliente[seq].email)-1]='\0';
                system("pause");
                system("cls");
                seq++ ;
            }
            else{
                printf ("******AGENDA CHEIA!****** \n\n");
                system("pause");
                system("cls");
            }
            break;
        case 2:
            if(seq ==0){
                printf ("******AGENDA VAZIA!****** \n\n");
                system("pause");
            }
            else{
                printf ("LISTA DE CONTATOS\n\n");
                for (i=0; i<seq; i++){
                    printf ("Código ------: %d\n"  , i+1                );
                    printf ("Nome --------: %s\n"  , cliente[i].nome    );
                    printf ("Telefone ----: %s\n"  , cliente[i].telefone);
                    printf ("E-mail ------: %s\n\n", cliente[i].email   );
                    system("pause");
                    system("cls");
                }
            }
            break;
        case 0:
            printf ("ENCERRANDO O PROGRAMA!\n\n");
            system("pause");
            break;
        default:
            printf ("ERRO! OPÇÃO INVÁLIDA! \n\n");
        }
    }while (escolha !=0);
    return(0);
}

 

  • Curtir 1
Link para o post
Compartilhar em outros sites

@devair1010, ficou perfeito, mas testei ele aqui, ainda não compreendi onde vou adicionar o valor na unidade, rodei o code que me enviou, cadastrei 2 contatos e coloquei pra listar depois, apareceu apenas o cadastro 1 não trouxe o cadastro 2 

 

Se eu mudar o Valor do code no comando listar, para 1, quando cadastro 2 contatos apenas aparece quando listo o cadastro 2

printf ("LISTA DE CONTATOS\n\n");
for (i=1; i<seq; i++) {

 

  • Obrigado 1
Link para o post
Compartilhar em outros sites

Tem um campo codigo na estrutura. Então atribua o valor da expressão (seq + 1) lá depois que confirmar o cadastro. 

 

Quando exibir LISTA DE CONTATOS use o campo codigo da estrutura ou a expressão porque são iguais.

Faz sentido ?

  • Obrigado 1
Link para o post
Compartilhar em outros sites

@zZDuzaaxC     ele está listando todos , mas sendo um de cada vez por causa do system"pause" , então a cada listagem click enter para ver outro cadastro , ou coloque essas duas linhas aqui assim   :

    printf ("LISTA DE CONTATOS\n\n");
    for (i=0; i<seq; i++){
        printf ("Código ------: %d\n"  , i+1                );
        printf ("Nome --------: %s\n"  , cliente[i].nome    );
        printf ("Telefone ----: %s\n"  , cliente[i].telefone);
        printf ("E-mail ------: %s\n\n", cliente[i].email   );
    }
    system("pause");
    system("cls");                     
}
break;

 

Link para o post
Compartilhar em outros sites
  • Moderador

Só para complementar:

 

3 horas atrás, devair1010 disse:

printf ("Código ------: %d\n" , i+1 );

 

Esse "+1" não altera o conteúdo da variável i. É apenas uma operação de adição comum... Se i vale, por exemplo, 0, vai continuar com 0. Lá no printf() vai ser efetuado um cálculo e vai retornar o seu resultado, logo, vai aparecer 1 na tela. Nos comandos abaixo, o i vai continuar com o valor 0, portanto acessando as posições 0 do vetor. Seria algo como:

<valor da variável i> + 1

 

Se fosse necessário atualizar i, poderia utilizar i++, assim, atualizaria o valor da própria variável i. Iria aparece 1 na tela, e abaixo também acessaria a posição 1. Mas não é o teu caso!!!. Seria algo como:

<faça i = i+1, depois utilize i>

 

 

Ou utilizar ++i. Assim, exibiria 0, e abaixo acessaria 1, ou seja: no printf() iria utilizar o valor atual de i, que seria 0, e depois iria atualizar a variável i passando para 1. Seria algo como:

<use i, depois faça i = i+1>

 

São 3 comandos diferentes, com 3 propósitos diferentes.

 

  • Curtir 1
Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora


Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!