Ir ao conteúdo
  • Cadastre-se

Retornar ao Menu - Programação Estruturada C


Thiago72

Posts recomendados

Boa tarde amigos.

 

Estou com um problema para fazer funcionar o seguinte código estruturado. (abaixo)

O problema é que como sou novato não sei fazer com que após o cadastro ele volte ao MENU secundário ou ao MENU principal da estrutura de cadastro de clientes.

 

Alguém poderia dar uma força, uma ideia ou mesmo me ensinar o que eu devo fazer.

 

Está funcionando, eu acho, testei no Dev e no Code Blocks.

No meu pc eu tenho que compilar 2x, mas não sei porque.

 

Segue anexo, obrigado!

 

Muito obrigado!

 

Att,

 

 

 

 

ATPS Atualizada 1.txt

Link para o comentário
Compartilhar em outros sites

@Thiago72

 

Seguintes erros ao compilar:

 

 

216:1: warning: passing argument 1 of 'gets' from incompatible pointer type [enabled by default] gets (registros[pos].tel);
 
357:39: note: expected 'char *' but argument is of type 'int *'  _CRTIMP char* __cdecl __MINGW_NOTHROW gets (char*);
 
224:6: warning: conflicting types for 'cadastrar_f' [enabled by default] void cadastrar_f (int id, int pos) { //Função para cadastrar fornecedores.
 
123:1: note: previous implicit declaration of 'cadastrar_f' was here  cadastrar_f (idauxf, posicaof);
 
232:1: warning: passing argument 1 of 'gets' from incompatible pointer type [enabled by default] gets (registrosf[pos].telf);
 
357:39: note: expected 'char *' but argument is of type 'int *' _CRTIMP char* __cdecl __MINGW_NOTHROW gets (char*);
 
243:6: warning: conflicting types for 'cadastrar_p' [enabled by default] void cadastrar_p (int id, int pos) {
 
173:1: note: previous implicit declaration of 'cadastrar_p' was here cadastrar_p (idauxp, posicaop);
 
...
 
obs: A função gets(char *str) além de não ser recomendada, recebe um char* como parâmetro, no seu programa você está passando um int.
 
Link para o comentário
Compartilhar em outros sites

Boa observação, agradeço muito.

 

Mas aqui está compilando, não sei como resolver esses outros erros, não entendo o motivo, gostaria muito de aprender a resolver estes erros, minha prova está chegando e eu não estou afinado para erros como estes, poderia me ajudar para eu estudar emcima do que voce me disser?

 

Muito obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

@Thiago72

 

 

Para corrigir o erro basta colocar o protótipo das funções :

void cadastrar_f (int id, int pos);void cadastrar_p (int id, int pos);

E trocar int telf[15] e int tel[15] por um char, já que você lê os valores com gets()

char tel[15];char telf [15];

Olhe esse exemplo de menus:

#include <stdio.h>#include <stdlib.h>/*Funcao menu */char menu(){    system("cls");    printf("1-Acao 1.0\n");    printf("2-Acao 2.0\n");    printf("0-sair\n");    printf("\n\n> ");    return(toupper(getche()));}/* funcao 1*/int acao1_0(){    char op;    printf("\n\nTeste 1-0\n");    printf("\nProximo (s/n): ");    scanf("%c%*c", &op);    if (op == 's')    {        return 1;    }    else    {        return 0;    }}/* impime uma msg*/void acao1_1(){    printf("\nBemvindo acao 1.1\n");    getche();}/*funcao 2*/int acao2_0(){    char op;    printf("\n\nTeste 2-0\n");    printf("\nProximo (s/n): ");    scanf("%c%*c", &op);    if (op == 's')    {        return 1;    }    else    {        return 0;    }}/*imprime uma msg*/void acao2_1(){    printf("\nBemvindo acao 2.1\n");    getche();}/*tarefa principal */int main(){    char op;    do    {        op = menu(); // recebe valor do menu        switch(op)        {            case '1':                 if (acao1_0() == 1)  /* se a acao1_0() retornar 1, chama a acao1_1() */                 {                    acao1_1();                     break;                 }                 else                    break;                        case '2':                if (acao2_0()== 1) /* se a acao2_0() retornar 1, chama a acao2_1() */                {                    acao2_1();                    break;                }                else                    break;        }        printf("\n");        } while(op != '0'); /* 0 para sair do menu*/    return 0;} 

obs: Não é um dos melhores exemplo, mas da pra ter uma noção.

Link para o comentário
Compartilhar em outros sites

Este exemplo foi muito bom!

 

Deu pra reparar alguns erros que estou cometendo, 1 dele é a falta de aspas simples nos numeros do "case", mais o programa estava rodando, é obrigado a por estas aspas simples?

 

Agora o programa parou de funcionar e está indicando na linha onde tem um "case 2 : "

Link para o comentário
Compartilhar em outros sites

@Thiago72

 

Essas aspas simples nos números do case: é porque cade número é do tipo char e não do tipo int.

Se o menu for do tipo int (igual no seu código), não precisa das aspas simples...

int menu(){    int op;    printf("\n");    printf("1-Acao 1.0\n");    printf("2-Acao 2.0\n");    printf("0-sair\n");    printf("\n\n> ");    scanf("%d", &op);    return op;}
Link para o comentário
Compartilhar em outros sites

@slackforgo

 

Consegui fazer rodar o programa novamente.

Mas meu amigo, ta difícil fazer com que após cadastrar um cliente, fornecedor ou produto, ele retorne ao Menu principal ou ao menu secundario.

Não sei fazer essa lógica, pode me ajudar?

#include <stdio.h>#include <stdlib.h>struct tipo_cadastro { // Struct de cadastro de clientes. int id; char nome [50]; char end [50]; char tel[15]; int vazio; } registros [10]; struct tipo_fornecedores { // Struct de cadastro de fornecedores. int idf; char nomef [50]; char endf [50]; char telf [15]; int vaziof; } registrosf [10]; struct tipo_produtos { //Struct de cadastro de Produtos. int idp; char nomep [100]; char marcap [50]; char anoprod [4]; int vaziop; } registrosp[10];void cadastrar (int id, int pos);void consultar ();int relatorio ();int verifica_pos ();int verifica_id (int id);int verifica_pos ();void excluir ();void cadastrar_f (int id, int pos);void cadastrar_p (int id, int pos);main () { // Inicio do programa.int i;printf ("Programa Thiago \n\n");printf ("           ____Menu____\n\n");printf ("1. Clientes \n2. Fornecedores \n3.Produtos \n\n");printf ("Digite o numero da opcao desejada: ");scanf ("%d", &i);system ("cls");switch(i){ case 1:{    printf("\n\n___Menu Clientes___\n\n");    printf ("1. Cadastrar\n 2. Consultar\n 3. Excluir\n 4. Sair\n\n  Opcao: "); // Menu Clientesint op=0, posicao, idaux, retorno; while (op != 5) {scanf ("%d", &op);system ("cls");switch (op) {case 1: { //Cadastrar.posicao = verifica_pos ();if (posicao !=-1) {printf ("\n Entre com o ID do Cliente: ");scanf ("%d", &idaux);fflush (stdin);retorno = verifica_id (idaux);if (retorno ==1)cadastrar (idaux, posicao);elseprintf ("\n ID Já Existente!\n");}elseprintf ("\n Nao e possivel realizar mais cadastros!\n");break;}case 2: { //Consultar.consultar ();break;}case 3: {excluir ();break;}case 4: { printf ("\n Obriagdo por usar este programa, Tchau!\n\n"); getchar (); break;default:printf ("Opcao Invalida!");break;}}} case 2: { //MENU FORNECEDORES !!! printf ("__ _-_Menu Fornecedores_ _-__"); printf ("\n\n1. Novo Fornecedor\n 2. Consultar Fornecedor\n 3. Excluir\n 4. Sair\n\n  Opcao: "); // Fornecedoresint opf=0, posicaof, idauxf, retornof; while (opf != 5) {scanf ("%d", &opf);system ("cls");switch (opf) {case 1: { //Cadastrar.posicaof = verifica_pos ();if (posicaof !=-1) {printf ("\n Entre com o ID do Fornecedor: ");scanf ("%d", &idauxf);fflush (stdin);retornof = verifica_id (idauxf);if (retornof ==1)cadastrar_f (idauxf, posicaof);elseprintf ("\n ID Já Existente!\n");}elseprintf ("\n Nao e possivel realizar mais cadastros!\n");break;}case 2: { //Consultar.consultar ();break;}case 3: {excluir ();break;}case 4: { printf ("\n Obriagdo por usar este programa, Tchau!\n\n"); getchar (); break;default:printf ("Opcao Invalida!");break;}}} }} case 3: { //Inicio produto. printf ("__ _-_Menu Produtos_ _-__"); printf ("\n\n 1. Cadastrar Produto \n 2. Busca Produto \n 3. Excluir \n 4. Sair \n\n  Opcao: "); // Fornecedoresint opp=0, posicaop, idauxp, retornop; while (opp != 5) {scanf ("%d", &opp);system ("cls");switch (opp) {case 1: { //Cadastrar Produto.posicaop = verifica_pos ();if (posicaop !=-1) {printf ("\n Entre com o CODIGO do Protudo: ");scanf ("%d", &idauxp);fflush (stdin);retornop = verifica_id (idauxp);if (retornop ==1)cadastrar_p (idauxp, posicaop);elseprintf ("\n CODIGO já Existente!\n");}elseprintf ("\n Nao e possivel cadastrar mais produtos!\n");break;}case 2: { //Consultar.consultar ();break;}case 3: {excluir ();break;}case 4: { printf ("\n Obriagdo por usar este programa, Tchau!\n\n"); getchar (); break;default:printf ("Opcao Invalida!");break;  // Fim menu Produto  break; } }}}}} //Fim do MAIN ()void cadastrar (int id, int pos) { //Função para cadastrar clientes.pos=verifica_pos();registros[pos].id=id;printf ("\n Nome: \n");gets (registros[pos].nome);printf ("\n Endereco: \n");gets (registros[pos].end);printf ("\n Telefone de Contato: \n");gets (registros[pos].tel);registros[pos].vazio=1;printf ("\n Cadastro Realizado com Sucesso!\n\n");getchar ();getchar ();system ("cls");} //Final da função cadastrar clientes.void cadastrar_f (int id, int pos) { //Função para cadastrar fornecedores.pos=verifica_pos();registrosf[pos].idf=id;printf ("\n Nome Fornecedor: \n");gets (registrosf[pos].nomef);printf ("\n Endereco: \n");gets (registrosf[pos].endf);printf ("\n Telefone de Contato (somente numeros): \n");gets (registrosf[pos].telf);registrosf[pos].vaziof=1;printf ("\n Cadastro Realizado com Sucesso!\n\n");getchar ();getchar ();system ("cls");} //Final da função cadastrar fornecedores// Inicio da função para cadastrar produtos.void cadastrar_p (int id, int pos) {pos=verifica_pos();registrosp[pos].idp=id;printf ("\n Nome do Produto: \n");gets (registrosp[pos].nomep);printf ("\n Marca: \n");gets (registrosp[pos].marcap);printf ("\n Ano de fabricação: \n");gets (registrosp[pos].anoprod);registrosp[pos].vaziop=1;printf ("\n Cadastro Realizado com Sucesso!\n\n");getchar ();getchar ();system ("cls");} //Final da função para cadastrar produtos.//Inicio da função consultar clientes.void consultar () {int cont=0, id;printf ("\nEntre com o ID\n");scanf ("%d", &id);system ("cls");while (cont<=13) {if (registros[cont]. id==id) {if (registros[cont]. vazio==1) {printf ("\n Nome: %s \n", registros[cont].nome);printf ("\n Endereco: %s \n", registros[cont].end);printf ("\n Telefone: %d \n", registros[cont].tel);getchar ();printf ("\n");system ("pause");system ("cls");break;}}cont++;if (cont>13)printf ("\n Codigo nao encontrado! \n");}} // Fim da função consultar clientes//Inicio da função consultar fornecedores.void consultarf () {int cont=0, id;printf ("\nEntre com o ID\n");scanf ("%d", &id);system ("cls");while (cont<=13) {if (registrosf[cont]. idf==id) {if (registrosf[cont]. vaziof==1) {printf ("\n Nome: %s \n", registrosf[cont].nomef);printf ("\n Endereco: %s \n", registrosf[cont].endf);printf ("\n Telefone: %d \n", registrosf[cont].telf);getchar ();printf ("\n");system ("pause");system ("cls");break;}}cont++;if (cont>13)printf ("\n Codigo nao encontrado! \n");}} // Fim da função consultar fornecedores//Inicio da função consultar produtos.void consultarp () {int cont=0, id;printf ("\nEntre com o ID\n");scanf ("%d", &id);system ("cls");while (cont<=13) {if (registrosf[cont]. idf==id) {if (registrosf[cont]. vaziof==1) {printf ("\n Nome: %s \n", registrosf[cont].nomef);printf ("\n Endereco: %s \n", registrosf[cont].endf);printf ("\n Telefone: %d \n", registrosf[cont].telf);getchar ();printf ("\n");system ("pause");system ("cls");break;}}cont++;if (cont>13)printf ("\n Codigo nao encontrado! \n");}} // Fim da função consultar produtos.//Função verifica posiçãoint verifica_pos () {int cont = 0;while (cont<=100) {if (registros[cont].vazio==0)return (cont);cont++;}return (-1);}//Função zerar.void zerar () {int cont;for (cont = 0; cont<=13; cont++)registros[cont].vazio = 0;}//Função verifica IDint verifica_id (int id) {int cont = 0;while (cont<=13) {if (registros[cont].id==id)return (0);cont++;}return (1);}//Função excluir.void excluir () {int id, cont=0;char resp;printf ("\n Entre com o codigo que deseja excluir: \n");scanf ("%d", &id);while (cont<=13) {if (registros[cont].id==id)if (registros[cont].vazio==1) {printf ("\n Nome: %s \n", registros[cont].nome);printf ("\n Endereco: %s \n", registros[cont].end);printf ("\n Telefone: %d \n", registros[cont].tel);getchar ();printf ("\n Deseja realmente excluir este cliente? S/N: ");scanf ("%c", &resp);if (resp=='S' ||resp=='s') {registros[cont].vazio=0;printf ("\n Excluído!\n");break;}else if (resp=='N'||resp=='n') {printf ("Exclusao Cancelada!");break;}}cont++;if (cont>13)printf ("\n Codigo nao encontrado!\n");}getchar ();system ("pause");system ("cls");}
Link para o comentário
Compartilhar em outros sites

@Thiago72

 

Seu código não está indentado isso dificulta a manutenção. 

 

-> Esse exemplo que eu fiz, está todo comentado e vai te ajudar a entender como fiz ... Ele possui menu e submenu.

 

Código:

#include <stdio.h>#include <stdlib.h>/* struct para cadastro de clientes */typedef struct cadastro{    int id;    char nome[20];    char end[50];    char tel[15];}cadastro;/*struct para dacastro de funcionario */typedef struct cadastrof{    int id;    char nome[20];    char end[50];    char tel[15];}cadastrof;//variaveis globaisint i = 0, i2 = 0; //contcadastro cad[10]; //cadastrar maximo 10 clientescadastrof cadf[10]; //cadastrar maximo 10 funcionario/* Funcao menu(), retorna um char com a opcao escolhida */char menu(){    system("cls");    printf("------ Menu ------\n");    printf("1) Cliente\n");    printf("2) Funcionario\n");    printf("9) Sair\n");    printf("\n\n> ");    return toupper(getche());}/*Funcao cadastrar(), cadastra cliente */void cadastrar(){    printf("\n\n");    if (i == 10 || i >10) //se i igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Numero de cadastro cheio !\n");        return;    }    else    {        printf("ID: ");        scanf("%d", &cad[i].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cad[i].nome);        printf("Endereco: ");        fflush(stdin);        gets(cad[i].end);        printf("Tel: ");        fflush(stdin);        gets(cad[i].tel);    }    i++; //contador}/*Funcao consultar(), consulta cliente pelo id*/void consultar(){    int j, id;    printf("\n");    printf("Digite id: ");    scanf("%d", &id);    for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            printf("\nID:%d \t NOME:%s \t END:%s \t TEL:%s\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            break;        }    }    getche(); //pause}/*Funcao cadastrarf(), cadastra funcionario */void cadastrarf(){    printf("\n\n");    if (i2 == 10 || i2 > 10) //se i2 igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Numero de cadastro cheio !\n");        return;    }    else    {        printf("ID: ");        scanf("%d", &cadf[i2].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cadf[i2].nome);        printf("Endereco: ");        fflush(stdin);        gets(cadf[i2].end);        printf("Tel: ");        fflush(stdin);        gets(cadf[i2].tel);    }    i2++; //contador}/*Funcao consultarf(), consulta funcionario pelo id*/void consultarf(){    int j, id;    printf("\n");    printf("Digite id: ");    scanf("%d", &id);    for (j=0; j<=i2; j++)    {        if (cadf[j].id == id) //procura pelo id do func        {            printf("\nID:%d \t NOME:%s \t END:%s \t TEL:%s\n", cadf[j].id, cadf[j].nome, cadf[j].end, cadf[j].tel);  //imprime na tela os valores do funcionario, consultado pelo id e sai do laço            break;        }    }    getche(); //pause}/*funcao cliente(), menu com as funcoes */void cliente(){    char op;    do    {        system("cls");        printf("------ Sub-Menu 1.1 ------\n");        printf("1) Cadastrar cliente\n");        printf("2) Consultar cliente\n");        printf("9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        switch(op)        {            case '1':                cadastrar(); break;            case '2':                consultar(); break;        }        }while (op != '9');    }/*funcao funcionario, menu com as funcoes */void funcionario(){    char op;    do    {        system("cls");        printf("------ Sub-Menu 2.1 ------\n");        printf("1) Cadastrar funcionario\n");        printf("2) Consultar funcionario\n");        printf("9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        switch(op)        {            case '1':                cadastrarf(); break;            case '2':                consultarf(); break;        }        }while (op != '9');    }/*Funcao main */int main(){    char op;    do    {        op = menu(); //chama a funcao menu retornando um char armazenando na variavel op        switch(op)        {            case '1':                cliente(); break; //funcao menu cliente            case '2':                 funcionario(); break; //funcao menu funcionario        }    } while (op != '9'); //9 sai do menu    return 0;} 

Tente implementar esse exemplo (e melhorando) no seu código mesmo que tenha refazê-lo desde o começo.

 

obs: Não é recomendado usar a função gets() e fflush(stdin). Usei apenas para ficar parecido com o seu código e ficar fácil a leitura.

 

 

Abraço.

Link para o comentário
Compartilhar em outros sites

É meu amigo acho que esta saíndo, ja evolui bastante do entendimento e no programa.

 

Agora estou tentando editar um cadastro, mas não esta salvando as informações emcima das informaçoes descritas.

 

Declarei a função:

void Editar(int EditID);void Editar(int EditID);

Fiz um "if" dentro da função de consultar o cadastro, e criei a variavél char sel (de seleção).

E se apertado o 'e' ele chama a função Editar(id)

void consultar(){    int j, id;    char sel;        printf("\n\n");    printf("Digite ID do cliente: ");    scanf("%d", &id);    for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            printf("\nId:%d \t\nNome:%s \t\nEndereco:%s \t\nTelefone:%s\n\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            printf("E - Editar\n");            sel=getche();            if(sel=='e');            {                Editar(id);            }            break;        }    }    getche(); //pause}

Aí depois do main existe a estrutura da função "void Editar (int EditID)"

void Editar(int EditID){    char selA;    while(true)    {        system("cls");        printf("\nId:%d \t\n 1 - Nome:%s \t\n 2 - Endereco:%s \t\n 3 - Telefone:%s\n\n4 - Sair\n\n", cad[EditID].id, cad[EditID].nome, cad[EditID].end, cad[EditID].tel);        selA=getche();        if(selA=='1')        {            printf("Novo Nome: ");            fflush(stdin);            gets(cad[EditID].nome);        }        else if(selA=='2')        {            printf("Novo Endereço: ");            fflush(stdin);            gets(cad[EditID].end);        }        else if(selA=='3')        {            printf("Novo Telefone: ");            fflush(stdin);            gets(cad[EditID].tel);        }        else if(selA=='4')        {            return;        }    }}

Da pra reparar que quando muda pra tela de editar, o ID aparede como 0, sendo que o cadastro ja começa do 1.

Segue o código completo de como está meu programa:

Muito obrigado pela ajuda @slackforgo

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* struct para cadastro de clientes */typedef struct cadastro{    int id;    char nome[20];    char end[50];    char tel[15];}cadastro;/*struct para dacastro de fornecedores */typedef struct cadastrof{    int id;    char nome[20];    char end[50];    char tel[15];}cadastrof;/*struct para dacastro de produto */typedef struct cadastrop{    int cod;    char produto[20];    char marca[30];    char modelo[30];}cadastrop;//variaveis globaisint i = 0, i2 = 0, i3 = 0; //contcadastro cad[10]; //cadastrar maximo 10 clientescadastrof cadf[10]; //cadastrar maximo 10 funcionariocadastrop cadp[10]; //cadastrar maximo 10 funcionariovoid Editar(int EditID); //editar clientesvoid Editar(int EditIDF); //editar fornecedoresvoid Editar(int EditIDP); //editar produtos/* Funcao menu(), retorna um char com a opcao escolhida */char menu(){    system("cls");    printf("\n((((___ Menu ___))))\n");    printf("\n\n1) Clientes\n");    printf("2) Fornecedores\n");    printf("3) Produtos\n");    printf("\n9) Sair\n");    printf("\n\n> ");    return toupper(getche());}/*Funcao cadastrar(), cadastra cliente */void cadastrar(){    printf("\n\n");    if (i == 10 || i >10) //se i igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais clientes!\n");        return;    }    else    {        cad[i].id = (i+1);        printf("Id: %d\n", cad[i].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cad[i].nome);        printf("Endereco: ");        fflush(stdin);        gets(cad[i].end);        printf("Tel: ");        fflush(stdin);        gets(cad[i].tel);    }    i++; //contador}/*Funcao consultar(), consulta cliente pelo id*/void consultar(){    int j, id;    char sel;        printf("\n\n");    printf("Digite ID do cliente: ");    scanf("%d", &id);    for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            printf("\nId:%d \t\nNome:%s \t\nEndereco:%s \t\nTelefone:%s\n\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            printf("E - Editar\n");            sel=getche();            if(sel=='e');            {                Editar(id);            }            break;        }    }    getche(); //pause}/*Funcao cadastrarf(), cadastra fornecedor */void cadastrarf(){    printf("\n\n");    if (i2 == 10 || i2 > 10) //se i2 igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel adicionar mais fornecedores!\n");        return;    }    else    {        cadf[i2].id = (i2+1);        printf("Id: %d\n", cadf[i2].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cadf[i2].nome);        printf("Endereco: ");        fflush(stdin);        gets(cadf[i2].end);        printf("Tel: ");        fflush(stdin);        gets(cadf[i2].tel);    }    i2++; //contador}/*Funcao consultarf(), consulta fornecedor pelo id*/void consultarf(){    int j, id;	char sel;	    printf("\n");    printf("Digite ID do fornecedor: ");    scanf("%d", &id);    for (j=0; j<=i2; j++)    {        if (cadf[j].id == id) //procura pelo id do fornecedor        {            printf("\nID:%d \t \nNome:%s \t \nEnedereco:%s \t \nTelefone:%s\n", cadf[j].id, cadf[j].nome, cadf[j].end, cadf[j].tel);  //imprime na tela os valores do fornecedor, consultado pelo id e sai do laço.            printf("E - Editar\n");            sel=getche();            if(sel=='e');            {                Editar(id);            }			break;        }    }    getche(); //pause}/*Funcao cadastrarp(), cadastra produto */void cadastrarp(){    printf("\n\n");    if (i3 == 10 || i3 > 10) //se i3 igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais produtos!\n");        return;    }    else    {        cadp[i3].cod = (i3+1);        printf("Codigo: %d\n", cadp[i3].cod);        printf("Produto: ");        fflush(stdin);        scanf("%s", cadp[i3].produto);        printf("Marca: ");        fflush(stdin);        gets(cadp[i3].marca);        printf("Modelo: ");        fflush(stdin);        gets(cadp[i3].modelo);    }    i3++; //contador}/*Funcao consultarp(), consulta produto pelo id*/void consultarp(){    int j, id;    printf("\n");    printf("Digite CODIGO do produto: ");    scanf("%d", &id);    for (j=0; j<=i3; j++)    {        if (cadp[j].cod == id) //procura pelo id do fornecedor        {            printf("\nCodigo:%d \t \nProduto:%s \t \nMarca:%s \t \nModelo:%s\n", cadp[j].cod, cadp[j].produto, cadp[j].marca, cadp[j].modelo);  //imprime na tela os valores do fornecedor, consultado pelo id e sai do laço.            break;        }    }    getche(); //pause}/*funcao cliente(), menu com as funcoes */void cliente(){    char op;    do    {        system("cls");        printf("\n((((___ Clientes ___))))\n");        printf("\n\n1) Cadastrar cliente\n");        printf("2) Consultar cliente\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        system("cls");        printf("((((___ Cadastrar Novo Cliente ___))))\n");        switch(op)        {            case '1':                cadastrar(); break;            case '2':                consultar(); break;        }    }while (op != '9');}/*funcao funcionario, menu com as funcoes */void funcionario(){    char op;    do    {        system("cls");        printf("((((___ Fornecedores ___))))\n");        printf("1) Cadastrar fornecedor\n");        printf("2) Consultar fornecedor\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        switch(op)        {            case '1':                cadastrarf(); break;            case '2':                consultarf(); break;        }    }while (op != '9');}/*funcao produto(), menu com as funcoes */void produto(){    char op;    do    {        system("cls");        printf("((((___ Produtos___))))\n");        printf("1) Cadastrar produto\n");        printf("2) Consultar produto\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        switch(op)        {            case '1':                cadastrarp(); break;            case '2':                consultarp(); break;        }    }while (op != '9');}/*Funcao main */int main(){    char op;    do    {        op = menu(); //chama a funcao menu retornando um char armazenando na variavel op        switch(op)        {            case '1':                cliente(); break; //funcao menu cliente            case '2':                funcionario(); break; //funcao menu funcionario            case '3':                produto(); break;//funcao menu produto        }    } while (op != '9'); //9 sai do menu        printf("\n\n");        printf("(((((((__________)))))");        printf("\n\n");    return 0;}//Fim do mainvoid Editar(int EditID){    char selA;    while(true)    {        system("cls");        printf("\nId:%d \t\n 1 - Nome:%s \t\n 2 - Endereco:%s \t\n 3 - Telefone:%s\n\n4 - Sair\n\n", cad[EditID].id, cad[EditID].nome, cad[EditID].end, cad[EditID].tel);        printf(">");		selA=getche();        if(selA=='1')        {            printf("\n\nNovo Nome: ");            fflush(stdin);            gets(cad[EditID].nome);        }        else if(selA=='2')        {            printf("\n\nNovo Endereço: ");            fflush(stdin);            gets(cad[EditID].end);        }        else if(selA=='3')        {            printf("\n\nNovo Telefone: ");            fflush(stdin);            gets(cad[EditID].tel);        }        else if(selA=='4')        {            return;        }    }}
Link para o comentário
Compartilhar em outros sites

@Thiago72

 

 

Você está passando o id como parâmetro e não a posição do vetor.

void consultar(){    int j, id;    char sel;        printf("\n\n");    printf("Digite ID do cliente: ");    scanf("%d", &id);     for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            printf("\nId:%d \t\nNome:%s \t\nEndereco:%s \t\nTelefone:%s\n\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            printf("E - Editar\n");            sel=getche();            if(sel=='e');            {                Editar(j); // voce colocoud id, e sim j que e a posicao do cliente no cad[]...            }            break;        }    }     getche(); //pause}

Não tenho como testar aqui, poste o resultado ! 

 

Abraço.

Link para o comentário
Compartilhar em outros sites

Amigo @slackforgo,

 

Lá vai eu pedir mais uma de suas boa orientações.

Estou tentando incrementar meu programa com a função excluir, criei então a Função

void Excluir (int ID); //Função excluir

Chamo a função dentro da função de consultar:

/*Funcao consultar(), consulta cliente pelo id*/void consultar(){    int j, id;    char sel, sel2;    system ("cls");    printf("\n\n");    printf("Digite ID do cliente: ");    scanf("%d", &id);    for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            if (cad[j].excluido != 1){                            printf("\nId:%d \t\nNome: %s \t\nEndereco: %s \t\nTelefone: %s \t\nCPF: %s \t\n\n Status: %s \n\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel, cad[j].cpf, cad[j].ai); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            printf("E - Editar\n D - Deletar\n");            sel=getche();                if (sel=='e'||sel=='E');            {                Editar(j);            }                if (sel=='d'||sel=='D');            {                Excluir(j);            }            break;        }         if (cad[j].excluido == 1);            {                system("cls");                printf("Esse cadastro ja foi excluido!!");                break;            }        }        }    getche(); //pause}

E então a estrutura da função:

void Excluir(int ID) //Função para editar clientes{    char sn;    while(true)    {        if(cad[ID].excluido!= 1){        system("cls");        printf("\nId:%d \t\n 1 - Nome: %s \t\n 2 - Endereco: %s \t\n 3 - Telefone: %s \t\n 4 - CPF: %s \t\n 5 - Status %s \t\n 9 - Sair\n\n", cad[ID].id, cad[ID].nome, cad[ID].end, cad[ID].tel, cad[ID].cpf, cad[ID].ai);        printf("Tem certeza que deseja excluir? (s/n)");        printf(">");		sn=getche();        if(sn=='s'||sn=='S')        {            cad[ID].excluido=1;            system("cls");            printf("\nExcluido com sucesso!");            break;        }        else if(sn=='n'||sn=='N')        {        }        }    }}

Agora o problema que acontece é o seguinte.

 

Está excluindo normal, porém quando consulto e aperto "D" para excluir ele antes vai para a função "Editar", sem eu apertar "E".

 

Sabe me dizer o que estou fazendo de errado?

 

Segue o meu codigo completo caso queira compilar.

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* struct para cadastro de clientes */typedef struct cadastro{    int id;    char nome[50];    char end[50];    char tel[11];    char cpf[11];    char ai[1];    int excluido;}cadastro;/*struct para dacastro de fornecedores */typedef struct cadastrof{    int id;    char nome[50];    char end[50];    char tel[11];    char cnpj[20];    char ai[1];}cadastrof;/*struct para dacastro de produto */typedef struct cadastrop{    int cod;    char produto[20];    char marca[30];    char modelo[30];    char ano[4];    char estoque[1];}cadastrop;//variaveis globaisint i = 0, i2 = 0, i3 = 0; //contcadastro cad[10]; //cadastrar maximo 10 clientescadastrof cadf[10]; //cadastrar maximo 10 funcionariocadastrop cadp[10]; //cadastrar maximo 10 funcionariovoid Editar(int EditID); //editar clientesvoid EditarF(int EditIDF); //editar fornecedoresvoid EditarP(int EditIDP); //editar produtosvoid Excluir (int ID); //Função excluir/* Funcao menu(), retorna um char com a opcao escolhida */char menu(){    system("cls");    printf("\n((((___ Menu ___))))\n");    printf("\n\n1) Clientes\n");    printf("2) Fornecedores\n");    printf("3) Produtos\n");    printf("\n9) Sair\n");    printf("\n\n> ");    return toupper(getche());}/*Funcao cadastrar(), cadastra cliente */void cadastrar(){    printf("\n\n");    if (i == 10 || i >10) //se i igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais clientes!\n");        return;    }    else    {        cad[i].id = (i+1);        printf("Id: %d\n", cad[i].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cad[i].nome);        printf("Endereco: ");        fflush(stdin);        gets(cad[i].end);        printf("Tel: ");        fflush(stdin);        gets(cad[i].tel);        printf("CPF: ");        fflush(stdin);        gets(cad[i].cpf);        printf("\n\n Digite \"A\" para ATIVO ou \"I\" para INATIVO: ");        fflush(stdin);        gets(cad[i].ai);        printf ("\n\nCliente cadastrado com sucesso!");        getchar ();    }    i++; //contador}/*Funcao consultar(), consulta cliente pelo id*/void consultar(){    int j, id;    char sel, sel2;    system ("cls");    printf("\n\n");    printf("Digite ID do cliente: ");    scanf("%d", &id);    for (j=0; j<=i; j++)    {        if (cad[j].id == id) //procura id do cliente        {            if (cad[j].excluido != 1){                            printf("\nId:%d \t\nNome: %s \t\nEndereco: %s \t\nTelefone: %s \t\nCPF: %s \t\n\n Status: %s \n\n", cad[j].id, cad[j].nome, cad[j].end, cad[j].tel, cad[j].cpf, cad[j].ai); //imprime na tela os valores do cliente, consultado pelo id e sai do laço            printf("E - Editar\n D - Deletar\n");            sel=getche();                if (sel=='e'||sel=='E');            {                Editar(j);            }                if (sel=='d'||sel=='D');            {                Excluir(j);            }            break;        }         if (cad[j].excluido == 1);            {                system("cls");                printf("Esse cadastro ja foi excluido!!");                break;            }        }        }    getche(); //pause}/*Funcao cadastrarf(), cadastra fornecedor */void cadastrarf(){    printf("\n\n");    if (i2 == 10 || i2 > 10) //se i2 igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel adicionar mais fornecedores!\n");        return;    }    else    {        cadf[i2].id = (i2+1);        printf("Id: %d\n", cadf[i2].id);        printf("Nome: ");        fflush(stdin);        scanf("%s", cadf[i2].nome);        printf("Endereco: ");        fflush(stdin);        gets(cadf[i2].end);        printf("Tel: ");        fflush(stdin);        gets(cadf[i2].tel);        printf("CNPJ: ");        fflush(stdin);        gets(cadf[i].cnpj);        printf("\n\n Digite \"A\" para ATIVO ou \"I\" para INATIVO: ");        fflush(stdin);        gets(cad[i].ai);        printf ("\n\nFornecedor cadastrado com sucesso!");        getchar ();    }    i2++; //contador}/*Funcao consultarf(), consulta fornecedor pelo id*/void consultarf(){    int j, id;	char sel;    printf("\n");    printf("Digite ID do fornecedor: ");    scanf("%d", &id);    for (j=0; j<=i2; j++)    {        if (cadf[j].id == id) //procura pelo id do fornecedor        {            printf("\nID:%d \t \nNome: %s \t \nEnedereco: %s \t \nTelefone: %s \t\nCNPJ: %s \t\n\nStatus: %s \n\n", cadf[j].id, cadf[j].nome, cadf[j].end, cadf[j].tel, cadf[j].cnpj, cadf[j].ai);  //imprime na tela os valores do fornecedor, consultado pelo id e sai do laço.            printf("\nE - Editar\n");            sel=getche();            if(sel=='e');            {                EditarF(j);            }			break;        }    }    getche(); //pause}/*Funcao cadastrarp(), cadastra produto */void cadastrarp(){    printf("\n\n");    if (i3 == 10 || i3 > 10) //se i3 igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais produtos!\n");        return;    }    else    {        cadp[i3].cod = (i3+1);        printf("Codigo: %d\n", cadp[i3].cod);        printf("Produto: ");        fflush(stdin);        scanf("%s", cadp[i3].produto);        printf("Marca: ");        fflush(stdin);        gets(cadp[i3].marca);        printf("Modelo: ");        fflush(stdin);        gets(cadp[i3].modelo);        printf("Ano: ");        fflush(stdin);        gets(cadp[i].ano);        printf("\n\n Digite \"S\" se houver Estoque ou \"N\" caso nao houver Estoque: ");        fflush(stdin);        gets(cadp[i].estoque);        printf ("\n\nProduto cadastrado com sucesso!");        getchar ();    }    i3++; //contador}/*Funcao consultarp(), consulta produto pelo id*/void consultarp(){    int j, id;    char sel;    printf("\n");    printf("Digite CODIGO do produto: ");    scanf("%d", &id);    for (j=0; j<=i3; j++)    {        if (cadp[j].cod == id) //procura pelo id do fornecedor        {            printf("\nCodigo:%d \t \nProduto:%s \t \nMarca:%s \t \nModelo:%s \t\nAno: %s \t\n\nPossui Estoque? %s \n\n", cadp[j].cod, cadp[j].produto, cadp[j].marca, cadp[j].modelo, cadp[j].ano, cadp[j].estoque);  //imprime na tela os valores do fornecedor, consultado pelo id e sai do laço.            printf("\nE - Editar\nD - Deletar\n");            sel=getche();            if(sel=='e');            {                EditarP(j);            }            if(sel=='d');            {                Excluir(j);            }            break;        }    }    getche(); //pause}/*funcao cliente(), menu com as funcoes */void cliente(){    char op;    do    {        system("cls");        printf("\n((((___ Clientes ___))))\n");        printf("\n\n1) Cadastrar cliente\n");        printf("2) Consultar cliente\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        system("cls");        printf("\n((((___ Cadastrar Novo Cliente ___))))\n");        switch(op)        {            case '1':                cadastrar(); break;            case '2':                consultar(); break;        }    }while (op != '9');}/*funcao funcionario, menu com as funcoes */void funcionario(){    char op;    do    {        system("cls");        printf("\n((((___ Fornecedores ___))))\n");        printf("\n\n1) Cadastrar fornecedor\n");        printf("2) Consultar fornecedor\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        system("cls");        printf("\n((((___ Cadastrar Novo Fornecedor ___))))\n");        switch(op)        {            case '1':                cadastrarf(); break;            case '2':                consultarf(); break;        }    }while (op != '9');}/*funcao produto(), menu com as funcoes */void produto(){    char op;    do    {        system("cls");        printf("\n((((___ Produtos___))))\n");        printf("\n\n1) Cadastrar produto\n");        printf("2) Consultar produto\n");        printf("\n9) Sair\n");        printf("\n\n> ");        op = toupper(getche());        system("cls");        printf("\n((((___ Cadastrar Novo Produto ___))))\n");        switch(op)        {            case '1':                cadastrarp(); break;            case '2':                consultarp(); break;        }    }while (op != '9');}/*Funcao main */int main(){    char op;    do    {        op = menu(); //chama a funcao menu retornando um char armazenando na variavel op        switch(op)        {            case '1':                cliente(); break; //funcao menu cliente            case '2':                funcionario(); break; //funcao menu funcionario            case '3':                produto(); break;//funcao menu produto        }    } while (op != '9'); //9 sai do menu        printf("\n\n");        printf("(((((((__________)))))");        printf("\n\n");    return 0;}//Fim do mainvoid Editar(int EditID) //Função para editar clientes{    char selA;    while(true)    {        system("cls");        printf("\nId:%d \t\n 1 - Nome: %s \t\n 2 - Endereco: %s \t\n 3 - Telefone: %s \t\n 4 - CPF: %s \t\n 5 - Status %s \t\n 9 - Sair\n\n", cad[EditID].id, cad[EditID].nome, cad[EditID].end, cad[EditID].tel, cad[EditID].cpf, cad[EditID].ai);        printf("Digite o numero da opcao que deseja editar:");        printf(">");		selA=getche();        if(selA=='1')        {            printf("\n\nNovo Nome: ");            fflush(stdin);            gets(cad[EditID].nome);        }        else if(selA=='2')        {            printf("\n\nEditar Endereço: ");            fflush(stdin);            gets(cad[EditID].end);        }        else if(selA=='3')        {            printf("\n\nEditar Telefone: ");            fflush(stdin);            gets(cad[EditID].tel);        }        else if(selA=='4')        {            printf("\n\nEditar CPF: ");            fflush(stdin);            gets(cad[EditID].cpf);        }        else if(selA=='5')        {            printf("\n\nEditar Status: ");            fflush(stdin);            gets(cad[EditID].ai);        }        else if(selA=='9')        {            return;        }    }}void EditarF(int EditIDF) //Função para editar fornecedores{    char selA;    while(true)    {        system("cls");        printf("\nId:%d \t\n 1 - Nome: %s \t\n 2 - Endereco: %s \t\n 3 - Telefone: %s \t\n 4 - CNPJ: %s \t\n 5 - Status: %s \t\n9 - Sair\n\n", cadf[EditIDF].id, cadf[EditIDF].nome, cadf[EditIDF].end, cadf[EditIDF].tel, cadf[EditIDF].cnpj, cadf[EditIDF].ai);        printf(">");		selA=getche();        if(selA=='1')        {            printf("\n\nEditar Nome: ");            fflush(stdin);            gets(cadf[EditIDF].nome);        }        else if(selA=='2')        {            printf("\n\nEditar Endereço: ");            fflush(stdin);            gets(cadf[EditIDF].end);        }        else if(selA=='3')        {            printf("\n\nEditar Telefone: ");            fflush(stdin);            gets(cadf[EditIDF].tel);        }        else if(selA=='4')        {            printf("\n\nEditar CNPJ: ");            fflush(stdin);            gets(cadf[EditIDF].cnpj);        }        else if(selA=='5')        {            printf("\n\nEditar Status: ");            fflush(stdin);            gets(cadf[EditIDF].ai);        }        else if(selA=='9')        {            return;        }    }}void EditarP(int EditIDP) //Função para editar produtos{    char selA;    while(true)    {        system("cls");        printf("\nId:%d \t\n\n 1 - Produto: %s \t\n 2 - Marca: %s \t\n 3 - Modelo: %s \t\n 4 - Ano: %s \t\n 9 - Sair\n\n", cadp[EditIDP].cod, cadp[EditIDP].produto, cadp[EditIDP].marca, cadp[EditIDP].modelo,cadp[EditIDP].ano, cadp[EditIDP].estoque);        printf(">");		selA=getche();        if(selA=='1')        {            printf("\n\nEditar Produto: ");            fflush(stdin);            gets(cadp[EditIDP].produto);        }        else if(selA=='2')        {            printf("\n\nEditar Endereço: ");            fflush(stdin);            gets(cadp[EditIDP].marca);        }        else if(selA=='3')        {            printf("\n\nEditar Telefone: ");            fflush(stdin);            gets(cadp[EditIDP].modelo);        }        else if(selA=='4')        {            printf("\n\nEditar Ano: ");            fflush(stdin);            gets(cadp[EditIDP].ano);        }        else if(selA=='5')        {            printf("\n\nEditar Status de Estoque: ");            fflush(stdin);            gets(cadp[EditIDP].estoque);        }        else if(selA=='9')        {            return;        }    }}void Excluir(int ID) //Função para editar clientes{    char sn;    while(true)    {        if(cad[ID].excluido!= 1){        system("cls");        printf("\nId:%d \t\n 1 - Nome: %s \t\n 2 - Endereco: %s \t\n 3 - Telefone: %s \t\n 4 - CPF: %s \t\n 5 - Status %s \t\n 9 - Sair\n\n", cad[ID].id, cad[ID].nome, cad[ID].end, cad[ID].tel, cad[ID].cpf, cad[ID].ai);        printf("Tem certeza que deseja excluir? (s/n)");        printf(">");		sn=getche();        if(sn=='s'||sn=='S')        {            cad[ID].excluido=1;            system("cls");            printf("\nExcluido com sucesso!");            break;        }        else if(sn=='n'||sn=='N')        {        }        }    }}
Link para o comentário
Compartilhar em outros sites

@Thiago72

 

 

Não olhei o restante do código, mas na função consultar(), tem o seguinte erro:

 

> if(sel=='d'||sel=='D'); e if(sel=='d'||sel=='D');

 

Você colocou o "ponto e virgula".

if (sel=='e'||sel=='E') // if(sel=='e'||sel=='E';  {     Editar(j); }else if (sel=='d'||sel=='D') // if(sel=='d'||sel=='D'); {      Excluir(j); }

A melhor opção nesse caso, excluir cadastro seria uma lista encadeada simples, dê uma pesquisada sobre isso.

 

Abraço.

Link para o comentário
Compartilhar em outros sites

@slarkforgo

 

É eu percebi rs, me desculpe.

Vou pesquisar sobre lista encadeada.

 

Mano muito obrigado pela sua ajuda, estou dando este tópico como resolvido, pois ele ja está grande demais rs.

Outras dúvidas estarei criando outro tópico.

 

Muito obrigdado!!!

 

Att,

Link para o comentário
Compartilhar em outros sites

Arquivado

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

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