Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

@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
Postado

@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
Postado

@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
Postado

@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 .

Postado

@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
Postado

@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
Postado

@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
Postado

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
Postado

@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;

 

  • Membro VIP
Postado

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!