Ajuda aew programação em C

8 respostas
Michellepires

Onde tah o erro??

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

typedef struct cad{
        char nome[30];
        char end[40];
        char cid[15];
        char est[3];
        char tel[12];
        struct cad *prox;
        }entrada_lista;
        entrada_lista *inicio;
        
int agenda(void);
void inserir(void);
void alterar(void);
void remover(void);
void listartodos(void);
void listarultimo(void);


int main(void){
    
    inicio=NULL;
                for (;;){
                    switch(agenda()){
                                   case '1':inserir();
                                        break;
                                  /* case '2':alterar();
                                        break;*/
                                   case '3':remover();
                                        break;
                                   case '4':listartodos();
                                        break;
                                   /*case '5':listarultimo();
                                        break;*/
                                   case '6':exit(0);
                                   }
                                   }
                                  }

int agenda(void){
    int c;
    system("cls");
    printf("\t\t********************************\n");
    printf("\t\t*********** AGENDA *************\n");
    printf("\t\t********************************\n");
    printf("\nI - Inserir\n");
    printf("\n2 - Alterar\n");
    printf("\n3 - Remover\n");
    printf("\n4 - Listar Todos\n");
    printf("\n5 - Listar Ultimo\n");
    printf("\n6 - Sair\n\n");
    
    do{
                printf("Opcao:");
                scanf("%d",&c);
                }while (c<0||c>6);
                return c;
                }
     
      
void inserir(void){
     entrada_lista *info;
     
     info=(entrada_lista *)malloc(sizeof(entrada_lista));
     if (!info){
                printf("\nSem Memoria");
                return;
                }
                printf("digite o nome:");
                gets(info->nome);
                printf("digite o endereco:");
                gets(info->end);
                printf("digite a cidade:");
                gets(info->cid);
                printf("digite o estado:");
                gets(info->est);
                printf("digite o telefone:");
                gets(info->tel);
                
                info->prox=inicio;
                inicio=info;
                }
                
void remover(void){
     entrada_lista *aux;
     if (aux==NULL){
                      printf("erro");
                      return;
                      }
                      else{
                           aux=inicio;
                           inicio=inicio->prox;
                           free(aux);
                           }
                           }
                      
void listartodos(void){
     entrada_lista *percorre_lista;
     
     percorre_lista=inicio;
     printf("pessoas armazenadas\n\n");
                     while (percorre_lista!=NULL){
                           printf("\nnome:%s",percorre_lista->nome);
                           printf("\nend:%s",percorre_lista->end);
                           printf("\ncid:%s",percorre_lista->cid);
                           printf("\nest:%s",percorre_lista->est);
                           printf("\ntel:%s",percorre_lista->tel);
                           percorre_lista=percorre_lista->prox;
                           }

    
                           }

8 Respostas

Sami_Koivu

Olá,

Já faz tanto tempo que não faço nada com C que acho que não vou poder te ajudar, mas para aqueles que manjam do C, acho que seria extremamente util se você pudesse dizer qual o problema com o código. Ele não compila? Ele não faz o que você quer? Ele não faz nada?

[]s,
Sami

Michellepires

Sami[/quote]
vlw pelo toke sami eh pq ele soh fik na opcao nao passa disto

Sami_Koivu

Olá,

Estou chutando mesmo, mas…

switch(agenda()){
                                   case '1':inserir();
                                        break;
                                  /* case '2':alterar();
                                        break;*/
                                   case '3':remover();
                                        break;
                                   case '4':listartodos();
                                        break;
                                   /*case '5':listarultimo();
                                        break;*/
                                   case '6':exit(0);
                                   }

Será que esses case ‘1’: etc não deveriam ser case 1: etc? Ou seja, sem as aspas simples. Pois se o valor retornado é um int (1-6) e não um int contendo um caracter (‘1’ - ‘6’).

[]s,
Sami

fmeyer

é isso mesmo sami, ela esta fazendo a leitura de um valor inteiro e quanto testa no switch ela busca por um caracter ‘1’…‘6’ é soh retirar as aspas que vai funcionar.

Michellepires

ja fiz oque vc disse, mesmo assim num ta funcionando.
valeu pelo toq.
vou continuar tentando.

Adriano_Almeida

Era isso mesmo, peguei o código, alterei aqui e funcionou:

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

 typedef struct cad{
	 char nome[30];
	 char end[40];
	 char cid[15];
	 char est[3];
	 char tel[12];
	 struct cad *prox;
	 }entrada_lista;
	 entrada_lista *inicio;

 int agenda(void);
 void inserir(void);
 void alterar(void);
 void remover(void);
 void listartodos(void);
 void listarultimo(void);


 int main(void){

     inicio=NULL;
	 for (;;){
		     switch(agenda()){
				    case 1:inserir();
					 break;
				   /* case 2:alterar();
					 break;*/
				    case 3:remover();
					 break;
				    case 4:listartodos();
					 break;
				    /*case 5:listarultimo();
					 break;*/
				    case 6:exit(0);
				    }
				    }
				   }

 int agenda(void){
     int c;
     clrscr();
     system("cls");
     printf("\t\t********************************\n");
     printf("\t\t*********** AGENDA *************\n");
     printf("\t\t********************************\n");
     printf("\nI - Inserir\n");
     printf("\n2 - Alterar\n");
     printf("\n3 - Remover\n");
     printf("\n4 - Listar Todos\n");
     printf("\n5 - Listar Ultimo\n");
     printf("\n6 - Sair\n\n");

     do{
		 printf("Opcao:");
		 scanf("%d",&c);
		 }while ((c < 0) || (c > 6));
		 return c;
		 }


 void inserir(void){
      entrada_lista *info;

      info=(entrada_lista *)malloc(sizeof(entrada_lista));
      if (!info){
		 printf("\nSem Memoria");
		 return;
		 }
		 printf("digite o nome:");
		 gets(info->nome);
		 printf("digite o endereco:");
		 gets(info->end);
		 printf("digite a cidade:");
		 gets(info->cid);
		 printf("digite o estado:");
		 gets(info->est);
		 printf("digite o telefone:");
		 gets(info->tel);

		 info->prox=inicio;
		 inicio=info;
		 }

 void remover(void){
      entrada_lista *aux;
      if (aux==NULL){
		       printf("erro");
		       return;
		       }
		       else{
			    aux=inicio;
			    inicio=inicio->prox;
			    free(aux);
			    }
			    }

 void listartodos(void){
      entrada_lista *percorre_lista;

      percorre_lista=inicio;
      printf("pessoas armazenadas\n\n");
		      while (percorre_lista!=NULL){
			    printf("\nnome:%s",percorre_lista->nome);
			    printf("\nend:%s",percorre_lista->end);
			    printf("\ncid:%s",percorre_lista->cid);
			    printf("\nest:%s",percorre_lista->est);
			    printf("\ntel:%s",percorre_lista->tel);
			    percorre_lista=percorre_lista->prox;
			    }


			    }

Testa ae!

Michellepires

preciso de uma dica de como fazer uma função alterar e uma função listar ultimo topico. desse programa. ajuda ai so falta isso.

ACDias

Manda o usuário digitar um nome por ex (um campo q seja único em cada elemento da lista) e percorre a lista até achar esse nome, quando achar vc altera os valores. Pra listar o último:

while (percorre_lista- &gt prox!=NULL) percorre_lista=percorre_lista- &gt prox;
Dpois deste while o percorre_lista estará no último elemento.

Criado 3 de dezembro de 2006
Ultima resposta 4 de dez. de 2006
Respostas 8
Participantes 5