Ir ao conteúdo
  • Cadastre-se

Struct em c++


The_Oicle

Posts recomendados

Estou estudando struct e não sei que o está errado nesse código. Help!

 

Ainda não está terminado! Mas testei assim mesmo e não dá certo!

Validação de senha - Implementar um programa que lê um nome e uma senha (entre 4 e 8 caracteres) e verifica e o usuário está autorizado ou não. Para essa verificação, o programa mantém uma lista de nomes e respectivas senhas. O programa mostra mensagens de erro se o nome ou a senha estiverem incorretos. São permitidas até 3 tentativas.
#include<iostream>#include<string>struct tipo_dumbo{    char nome[8][3]={"maria","joao","carlos"};  /// 5 nomes de até 10 caracteres    char senha[8][3]={"r9g269","fhuh","h8732"}; /// 5 senhas de 8 caracteres};int main(){   struct tipo_dumbo login;    login.nome;    login.senha;    char nome_user[10];    std::cout<<"Digite seu nome:";    std::cin>>nome_user;    char senha_user[8];    std::cout<<"Digite sua senha:";    std::cin>>senha_user;    ///Criptografa a senha;        int senha_user_crpt = senha_user;    ///a senha deve ficar entre 4 a 8 caracteres;    if(senha_user.size() >=4 && senha_user.size() <=8){        ///compara o login e a senha do usuario com o que ja está guardado no banco.        for(int i=0;i<8;i++){            for(int j=0;j<3;j++){                if(nome_user[i][j] == nome[i][j] && senha_user[i][j] == senha[i][j]){                    std::cout<<"voce esta autorizado!";                }else                    std::cout<<"voce nao esta autorizado!";            }        }    }else        std::cout<<"Sua senha tem que ter no minimo 4 e no maximo 8 caracteres!";}

Erros: http://postimg.org/image/tv7a7jyof/

Link para o comentário
Compartilhar em outros sites

ok vamos a ver esses problemas... São mais de um.

 

quando declaramos char nome[8][3] você esta declarando 8 strings de um tamanho de 3, e você esta preenchendo com 3 strings de um tamanho diferente cada um. Ou seja você reserva

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

 

...e você quer por nesse espaço

[m][a][r][a][\0]

[j][a][\0]

[c][a][r][l][o][\0]

 

Encontrou o problema? O problema é que você tem que declarar char nome[3][8] e não char nome[8][3]. Sendo assim... o problema é que você não dispõe de suficiente espaço para suas variáveis, o espaço é o mesmo, porém o IDE ou compilador ta avisando de que isso ta mal feito, no fundo a memoria é lineal, tudo isso vai em serie e não em paralelo já que a memoria não é "bidimensional" e sim mas bem como uma avenida muito grande com muitas casas alinhadas. Quando reservamos isso:

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

[][][]

 

.. no fundo a memoria ram ta assim:

[][][][][][][][][][][][][][][][][][][][][][][][]

 

Ou seja que cuando você recheia elas com {"maria" , "joao", "carlos"}, ela fica assim:

[m][a][r][i][a][\0][ ][ ][J][u][a][\0][ ][ ][ ][ ][c][a][r][l][o][s][\0][ ]

Si realizaramos uma comparaçao seria:

[ ][ ][ ][ ][ ][  ][ ][ ][ ][ ][ ][  ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][  ][ ][m][a][r][i][a][\0][ ][ ][J][u][a][\0][ ][ ][ ][ ][c][a][r][l][o][s][\0][ ]

A memoria estaria como no exemplo anterior, não sei se seus conhecimentos são avançados suficiente para entender esse conceito, porém assim funciona a historia essa. kkk

 

Esse código daqui(ver mais abaixo) demostra o que eu estou dizendo, ele imprime onde esta cada letra de {"maria" , "joao", "carlos"}, si os números sao consecutivos tipo 1,2,3,4,5.... porém não sei exatamente onde eles vão cair assim que pode variar, más sei que si o primeiro for por exemplo 22444, o seguinte será 22445, e o 3º será 22446..... assim até completar 3*8 chars que foi o que reservamos. Podem haver lixo na memoria e aparecer letrar raras, isso é normal, já que não a estamos utilizando por completo. Si for muito complicado isso tudo não ligue muito, isso se entende melhor quando chega os ponteiros.

 

Aqui o exemplo:

#include <iostream>#include <cstring>using namespace std;struct tipo_dumbo {    tipo_dumbo();    char nome[3][8];    char senha[3][8];};tipo_dumbo::tipo_dumbo(){    strcpy(nome[0], "maria" );    strcpy(nome[1], "joao" );    strcpy(nome[2], "carlos" );        strcpy(senha[0], "r9g269" );    strcpy(senha[1], "fhuh" );    strcpy(senha[2], "h8732" );    }int main() {    tipo_dumbo login;        //vamos comprovar que na memoria esteja todas as casinhas consecutivas...    for(int i = 0; i < 3; i++){        for( int j = 0; j < 8; j++ ){            cout << "Letra '" << login.nome[i][j] << "' =" << int (&login.nome[i][j]) << endl; //int(&login.nome[i]) vai imprimir a direçao de memoria de cada casinha, ou seja que nos vai dizer onde esta cada letra.=)         }    }    cin.ignore();    return 0;}

Ainda tem mais... Essa forma de inicializar (

char nome[8][3]={"maria","joao","carlos"};

) as variáveis só é compatível com compiladores que suportem o estândar C++11, e para isso deve estar ativado com o comando -std=c++11 nas opções do seu IDE/Compilador.

 

Exemplo:

#include <iostream>using namespace std;struct tipo_dumbo {    char nome[3][8] = {"maria" , "joao", "carlos"};    char senha[3][8] ={"r9g269", "fhuh", "h8732" };};int main() {    tipo_dumbo login;    cout << login.nome[0] << endl;    cout << login.nome[1] << endl;    cout << login.nome[2] << endl << endl;        cout << login.senha[0] << endl;    cout << login.senha[1] << endl;    cout << login.senha[2] << endl;        cin.ignore();    return 0;}

Si não quiser usar o estandarte C++11 pode fazer ele assim:

#include <iostream>using namespace std;struct tipo_dumbo {    char nome[3][8];    char senha[3][8];};int main() {    tipo_dumbo login = {         {"maria" , "joao", "carlos"},         {"r9g269", "fhuh", "h8732" }     };    cout << login.nome[0] << endl;    cout << login.nome[1] << endl;    cout << login.nome[2] << endl << endl;        cout << login.senha[0] << endl;    cout << login.senha[1] << endl;    cout << login.senha[2] << endl;        cin.ignore();    return 0;}

Ou ainda pode ser feito com construtores já que em C++ as estruturas são quase identicas as classes, a única diferença é que as classes tem seus membros privados por default, e as estruturas tem seus membros públicos por default, porém realmente são a mesma coisa, pode-se usar construtores, destrutores, construtores de cópia etc etc, tanto en estruturas como em classes(Unicamente em C++).

 

Um exemplo:

#include <iostream>#include <cstring>using namespace std;struct tipo_dumbo {    tipo_dumbo();    char nome[3][8];    char senha[3][8];};tipo_dumbo::tipo_dumbo(){    strcpy(nome[0], "maria" );    strcpy(nome[1], "joao" );    strcpy(nome[2], "carlos" );        strcpy(senha[0], "r9g269" );    strcpy(senha[1], "fhuh" );    strcpy(senha[2], "h8732" );    }int main() {    tipo_dumbo login;    cout << login.nome[0] << endl;    cout << login.nome[1] << endl;    cout << login.nome[2] << endl << endl;        cout << login.senha[0] << endl;    cout << login.senha[1] << endl;    cout << login.senha[2] << endl;        cin.ignore();    return 0;}

Pode haver muitas mais formas de iniciar isso, eu só coloquei as mais tipicamente corretas e fáceis de reproduzir. E você também pode trabalhar com a classe string tipica de C++.

 

Acho que com isso você já pode solucionar seu problema.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olha como eu fiz agora. Refiz o programa. Deu certo!

 

È o meu primeiro programa complexo. kkk...

 

Me fale depois a sua opinião sobre esse código novo.

Implementar um programa que lê um nome e uma senha (entre 4 e 8 caracteres) e verifica e o usuário está autorizado ou não. Para essa verificação, o programa mantém uma lista de nomes e respectivas senhas. O programa mostra mensagens de erro se o nome ou a senha estiverem incorretos. São permitidas até 3 tentativas.
#include<iostream>#include<cstring>struct tipo_dumbo{    char jose[2][8];    char maria[2][8];    char novo_user[2][8];};int main(){    struct tipo_dumbo login;    login.jose;    login.maria;    login.novo_user;    ///PUXA OS DADOS DE JOSE E MARIA    strcpy(login.jose[0],"jose");    strcpy(login.jose[1],"111111");    strcpy(login.maria[0],"maria");    strcpy(login.maria[1],"fhuh");    int stop = 0;    int cont = 0;    while(cont < 3 && stop == 0)    {        ///Puxa os dados do usuario        std::cout<<"Digite seu nome:";        std::cin>>login.novo_user[0];        std::cout<<"Digite sua senha:";        std::cin>>login.novo_user[1];      ///a senha DO USUARIO deve ficar entre 4 a 8 caracteres;        if(strlen(login.novo_user[1]) >=4 && strlen(login.novo_user[1])<=8){            ///Quando i==0 compara o nome do usuario com o que ja está guardado no banco.            ///quando i==1 compara a senha do usuario com o que já esta guardado no banco.            for(int i=0;i<2;i++){                        if(login.novo_user[i][8] == login.jose[i][8] || login.novo_user[i][8] == login.maria[i][8]){                        stop = 1;                        std::cout<<"\n\nVoce esta autorizado!\n\n";                                            }else                        {                            cont++;                        }            }        }else            std::cout<<"Sua senha tem que ter no minimo 4 e no maximo 8 caracteres!\n";        }}
Link para o comentário
Compartilhar em outros sites

Ainda tem erros. Por exemplo login.novo_user[8] == login.jose[8] você só esta comparando as ultimas duas letras e em cima você se sai de rango. nao existe nenhuma casinha novo_user[8] a ultima é novo_user[7] e ainda você não pode usar a ultima por que ela esta reservada para o carácter nulo que define o fim do string.

 

você diz que funciona porém eu só vejo bugs em esse código. Si quiser entender como funciona os strings e arrays pode me buscar por skype que te posso dar uma explicada. <_<

 

Onde você esta aprendendo C++? Quem te ensina?

Link para o comentário
Compartilhar em outros sites

Ainda tem erros. Por exemplo login.novo_user[8] == login.jose[8] você só esta comparando as ultimas duas letras e em cima você se sai de rango. nao existe nenhuma casinha novo_user[8] a ultima é novo_user[7] e ainda você não pode usar a ultima por que ela esta reservada para o carácter nulo que define o fim do string.

 

você diz que funciona porém eu só vejo bugs em esse código. Si quiser entender como funciona os strings e arrays pode me buscar por skype que te posso dar uma explicada. <_<

 

Onde você esta aprendendo C++? Quem te ensina?

 

int professor = "GOOGLE";

 

Estou fazendo todas os programas que tem nessa apostila "300 ideias para programar". 

 

È só digitar no google 300ideias.pdf

 

 

SObre a explicação que você deu ai no post: 

 

Eu coloquei nome[3][8]. ou seja  3 colunas de 8 caracteres. È isso que eu entendi bem no começo da sua explicação.

 

nome[3][8] = {"maria","joao","carlos"};

 

[m][a][r][a][/o]

[ j ][o][a][o][/o]

[c][a][r][l][o][/o]

 

O código abaixo pelo meu entendimento é que para cada login e senha, ele verifica caracter por caracter.

for(int i=0;i<2;i++){                 for(int j=0;j<8;j++)                 {                                          if(login.novo_user[i][j] == login.jose[i][j] || login.novo_user[i][j] == login.maria[i][j]){                                                        ///sai do programa                        stop = 1;                    }else                        {                            cont++;                        }                 }

Não estou mexendo com ponteiros, nem com funções por enquanto. A apostila não pede no momento.

Link para o comentário
Compartilhar em outros sites

Eu não vou fazer um texto kilometrico para te explicar tudo o que ta mal já que praticamente é tudo o que esta mal. Si você quiser aprender sobre arrays e matrizes de forma correta me adicione no skype e te explico melhor, no seus exemplo você não entendeu que são colunas, nem o que são filas, nem ta entendendo como trabalha as funções que gravam dados nas matrizes/vetores e que introduzem o carácter NULL al final do texto para marcar o fim do mesmo, nem entendeu como funciona os índices de C++. Em fim, o que você ta errando é em tudo... Lhe ofereço a oportunidade de aprender corretamente, porém não vou explicar aqui isso. Si quiser aprender ja lhe ofereci explicar por skype.

 

Sorte.

Link para o comentário
Compartilhar em outros sites

  • 4 anos depois...

Olá boa tarde pessoal estou aqui precisando muito de ajuda estou aprendendo ainda a linguagem em C++ queria ver com vcs como faço para arrumar esse sistema por que tem umas telas que não está puxando exemplo alterar pedido e também queria ver com você como eu coloco login de autenticação no começo do código na strutct n tô tendo noção estou usando esse código por temos que entregar esse projeto na faculdade queria uma ajuda de vocês se puder agradeço desde já 

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
struct pedido
{
char namePed[200];
char CPF[200];
char numPed[200];
char qtdPed[200];
char valorped[200];
int cod;
}logP[200];
struct cadastro
{
char CPF[200];
char telefone[200];
char nome[200];
char endereco[200];
char data[200];
int vazio,cod;
struct pedido clientePed;
}log[200];
//AQUI DECLARO AS FUNÇÕES A SEREM USADAS
int verifica_pos(void);
int verifica_cod( int cod );
int opt;
void cadastroP(int cod,int pos);
void list();
void cadastroPedido();
void consultaCod (void);
void excluirCliente (void);
int main(void){ //INICIO DO MAIN
int i,Opcao,OpcaoCliente,posicao,retorno;
int codaux;
do
{
printf("1 - Cadastrar Novo Cliente\n");
printf("2 - Cliente\n");

printf("3 - Alterar Cliente\n");
printf("4 - Excluir Cliente\n");
printf("5 - Cadastrar Pedido\n");
printf("6 - Alterar Pedido\n");
printf("7 - Excluir Pedido\n");
printf("8 - Sair\n");
printf(" Selecione uma opcao por favor: ");
scanf("%d", &Opcao);
getchar();
if (Opcao == 1)
{
printf("voce selecionou a opcao 1 - Cadastrar Novo Cliente\n");
posicao=verifica_pos();
if ( posicao != -1 )
{
printf("\nEntre com um codigo de 1 a 200 para seu cadastro: \n");
scanf("%d",&codaux);fflush(stdin);
retorno = verifica_cod( codaux );
if ( retorno == 1 )
cadastroP( codaux, posicao );
else{
printf("\nCodigo ja existente ou invalido pressione enter para voltar ao menu
principal\n");
getchar();
system("cls");
main();
}
}
else
printf("\nNao e possivel realizar mais cadastros!\n");
break;
}
else if (Opcao == 2)
{
system("cls");
do{

printf("voce selecionou a opcao 2 - Clientes\n\n");
printf("1 - Pesquisar cliente por codigo\n");
printf("2 - Listar todos os clientes\n");
printf("3 - Voltar ao menu principal\n");
printf("Selecione uma opcao por favor: ");
scanf("%d", &OpcaoCliente);
getchar();
if(OpcaoCliente == 1){
consultaCod();
}
else if(OpcaoCliente == 2){
list();
}
else if(OpcaoCliente == 3){
printf("voce selecionou voltar ao menu principal, pressione ENTER para
continuar");
getchar();
system("cls");
}
else
printf("Opcao Invalida\n\n");
}while(OpcaoCliente =!3 || OpcaoCliente > 3 || OpcaoCliente < 0 || OpcaoCliente == 0);
}
else if (Opcao == 3)
{
printf("voce selecionou a opcao 3 - Alterar Cliente\n");
}
else if (Opcao == 4)
{
printf("voce selecionou a opcao 4 - Excluir Cliente\n");
excluirCliente();
}
else if (Opcao == 5)
{
printf("voce selecionou a opcao 5 - Cadastrar Pedido\n");
cadastroPedido();
}
else if (Opcao == 6)
{
printf("voce selecionou a opcao 6 - Alterar Pedido\n");
}
else if (Opcao == 7)

printf("voce selecionou a opcao 7 - Excluir Pedido\n");
}
else if (Opcao == 8)
{
printf("voce selecionou a opcao 8 - Sair\n");
}
else{
printf("Opcao invalida, favor pressione enter para voltar ao menu principal");
getchar();
system("cls");
}
} while (Opcao != 8 || Opcao < 8);
} // FIM DO MAIN
void list(){ // Lista os usuarios cadastrados.
int i,j;
for(i=0;i<200;i++){
if(log.cod!=NULL){
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log.cod,log.nome,log.CPF,log.endereco,log.telefone);
}
}
printf("Pressione enter para volta ao menu principal");
getchar();
system("cls");
} //FIM DO LIST
void cadastroP(int cod, int pos){ //Cadastro das pessoas
int i;
do{
pos = verifica_pos();
log[pos].cod = cod;
printf("\nDigite seu nome: ");
gets(log[pos].nome);
printf("\nDigite seu CPF: ");
gets(log[pos].CPF);
printf("\nDigite seu Endereco: ");
gets(log[pos].endereco);
printf("\nDigite seu Telefone: ");
gets(log[pos].telefone);
log[pos].vazio = 1;
//printf("\nDigite enter para efetuar novo cadastro ou qualquer outra tecla para volar ao
menu principal");

{

//scanf("%d", &opt);
opt ==1;
getchar();
}while(opt==1);
system("cls");
main();
} // FIM DO CADASTRO DE PESSOAS
int verifica_pos( void ) //VERIFICADOR DA POSIÇÃO
{
int cont = 0;
while ( cont <= 200 )
{
if ( log[cont].vazio == 0 )
return(cont);
cont++;
}
return(-1);
} // FIM DO VERIFICADOR
int verifica_cod( int cod ) // VERIFICADOR DE CÓDIGO
{
int cont = 0;
while ( cont <= 200 )
{
if ( log[cont].cod == cod )
return(0);
cont++;
}
return(1);
} // FIM DO VERIFICADOR
void cadastroPedido(){ //Cadastro dos pedidos
system("cls");
int i;

int Option;
int OpcaoPedido;
char nomeCad[200];
printf("\nDigite seu nome como esta no cadastro: ");
gets(nomeCad);
for(i=0;i<200;i++){
if(strcmp(log.nome, nomeCad)==0){
do{
printf("\nEscolha o seu pedido: "); //PEDIDOS MERAMENTE ILUSTRATIVOS,
COLOQUEI SÓ PARA VER SE CONSEGUIA ANEXAR A 1 CADATRO MAS NÃO CONSEGUI.
printf("\n1- Pizza Calabresa");
printf("\n2- Pizza 4 Queijo");
printf("\n3- Pizza Margarita");
printf("\n4- Pizza Portuguesa\n");
scanf("%d", &OpcaoPedido);
if(OpcaoPedido == 1){
strcpy(log.clientePed.namePed, "Pizza Calabresa");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu
cadastro.",log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 2){
strcpy(log.clientePed.namePed, "Pizza 4 Queijo");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 3){
strcpy(log.clientePed.namePed, "Pizza Margarita");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 4){
strcpy(log.clientePed.namePed, "Pizza Portuguesa");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);

printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
}while(Option == 1);
system("cls");
}
}
} // FIM DO CADASTRO DE PEDIDOS.
void consultaCod (void) // CONSULTAR 1 CADASTRADO QUALQUER VIA CÓDIGO DADO
POR USUÁRIO.
{
int cont = 0, cod;
printf("\nEntre com o codigo\n");
scanf("%d",&cod);
fflush(stdin);
system("cls");
while ( cont <= 200 )
{
if (log[cont].cod==cod)
{
if (log[cont].vazio==1)
{
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone);
system ("pause");
system("cls");
break;
}
}
cont++;

if ( cont > 200 ){
printf("\nCodigo nao encontrado, pressione enter para volar ao menu principal\n");
getchar();
system("cls");
}
}
} // FIM DA FUNÇÃO CONSULTAR
void excluirCliente(void) // EXCLUI CLIENTE
{
int cod, cont = 0;
char resp;
printf("\nEntre com o codigo do registro que deseja excluir: \n");
scanf("%d", &cod );
while ( cont <= 200 )
{
if ( log[cont].cod == cod )
{
if (log[cont].vazio == 1 )
{
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone);
getchar();
printf("\nDeseja realmente exlucir? s/n: ");
scanf("%s",&resp);
if ( ( resp == 'S' ) || ( resp == 's' ) )
{
log[cont].vazio=0;
log[cont].cod = NULL;
printf("\nExclusao feita com sucesso\n");
break;
}
else
{
if ( ( resp == 'N' ) || ( resp == 'n' ) )
{
printf("Exclusao cancelada!\n");
break;

}
}
}
}
cont++;
if ( cont > 200 )
printf("\nCodigo nao encontrado\n");
}
system("pause");
system("cls");
}

Link para o comentário
Compartilhar em outros sites

10 horas atrás, Programadores disse:

Olá boa tarde pessoal estou aqui precisando muito de ajuda estou aprendendo ainda a linguagem em C++ queria ver com vcs como faço para arrumar esse sistema por que tem umas telas que não está puxando exemplo alterar pedido e também queria ver com você como eu coloco login de autenticação no começo do código na strutct n tô tendo noção estou usando esse código por temos que entregar esse projeto na faculdade queria uma ajuda de vocês se puder agradeço desde já 

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
struct pedido
{
char namePed[200];
char CPF[200];
char numPed[200];
char qtdPed[200];
char valorped[200];
int cod;
}logP[200];
struct cadastro
{
char CPF[200];
char telefone[200];
char nome[200];
char endereco[200];
char data[200];
int vazio,cod;
struct pedido clientePed;
}log[200];
//AQUI DECLARO AS FUNÇÕES A SEREM USADAS
int verifica_pos(void);
int verifica_cod( int cod );
int opt;
void cadastroP(int cod,int pos);
void list();
void cadastroPedido();
void consultaCod (void);
void excluirCliente (void);
int main(void){ //INICIO DO MAIN
int i,Opcao,OpcaoCliente,posicao,retorno;
int codaux;
do
{
printf("1 - Cadastrar Novo Cliente\n");
printf("2 - Cliente\n");

printf("3 - Alterar Cliente\n");
printf("4 - Excluir Cliente\n");
printf("5 - Cadastrar Pedido\n");
printf("6 - Alterar Pedido\n");
printf("7 - Excluir Pedido\n");
printf("8 - Sair\n");
printf(" Selecione uma opcao por favor: ");
scanf("%d", &Opcao);
getchar();
if (Opcao == 1)
{
printf("voce selecionou a opcao 1 - Cadastrar Novo Cliente\n");
posicao=verifica_pos();
if ( posicao != -1 )
{
printf("\nEntre com um codigo de 1 a 200 para seu cadastro: \n");
scanf("%d",&codaux);fflush(stdin);
retorno = verifica_cod( codaux );
if ( retorno == 1 )
cadastroP( codaux, posicao );
else{
printf("\nCodigo ja existente ou invalido pressione enter para voltar ao menu
principal\n");
getchar();
system("cls");
main();
}
}
else
printf("\nNao e possivel realizar mais cadastros!\n");
break;
}
else if (Opcao == 2)
{
system("cls");
do{

printf("voce selecionou a opcao 2 - Clientes\n\n");
printf("1 - Pesquisar cliente por codigo\n");
printf("2 - Listar todos os clientes\n");
printf("3 - Voltar ao menu principal\n");
printf("Selecione uma opcao por favor: ");
scanf("%d", &OpcaoCliente);
getchar();
if(OpcaoCliente == 1){
consultaCod();
}
else if(OpcaoCliente == 2){
list();
}
else if(OpcaoCliente == 3){
printf("voce selecionou voltar ao menu principal, pressione ENTER para
continuar");
getchar();
system("cls");
}
else
printf("Opcao Invalida\n\n");
}while(OpcaoCliente =!3 || OpcaoCliente > 3 || OpcaoCliente < 0 || OpcaoCliente == 0);
}
else if (Opcao == 3)
{
printf("voce selecionou a opcao 3 - Alterar Cliente\n");
}
else if (Opcao == 4)
{
printf("voce selecionou a opcao 4 - Excluir Cliente\n");
excluirCliente();
}
else if (Opcao == 5)
{
printf("voce selecionou a opcao 5 - Cadastrar Pedido\n");
cadastroPedido();
}
else if (Opcao == 6)
{
printf("voce selecionou a opcao 6 - Alterar Pedido\n");
}
else if (Opcao == 7)

printf("voce selecionou a opcao 7 - Excluir Pedido\n");
}
else if (Opcao == 😎
{
printf("voce selecionou a opcao 8 - Sair\n");
}
else{
printf("Opcao invalida, favor pressione enter para voltar ao menu principal");
getchar();
system("cls");
}
} while (Opcao != 8 || Opcao < 8);
} // FIM DO MAIN
void list(){ // Lista os usuarios cadastrados.
int i,j;
for(i=0;i<200;i++){
if(log.cod!=NULL){
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log.cod,log.nome,log.CPF,log.endereco,log.telefone);
}
}
printf("Pressione enter para volta ao menu principal");
getchar();
system("cls");
} //FIM DO LIST
void cadastroP(int cod, int pos){ //Cadastro das pessoas
int i;
do{
pos = verifica_pos();
log[pos].cod = cod;
printf("\nDigite seu nome: ");
gets(log[pos].nome);
printf("\nDigite seu CPF: ");
gets(log[pos].CPF);
printf("\nDigite seu Endereco: ");
gets(log[pos].endereco);
printf("\nDigite seu Telefone: ");
gets(log[pos].telefone);
log[pos].vazio = 1;
//printf("\nDigite enter para efetuar novo cadastro ou qualquer outra tecla para volar ao
menu principal");

{

//scanf("%d", &opt);
opt ==1;
getchar();
}while(opt==1);
system("cls");
main();
} // FIM DO CADASTRO DE PESSOAS
int verifica_pos( void ) //VERIFICADOR DA POSIÇÃO
{
int cont = 0;
while ( cont <= 200 )
{
if ( log[cont].vazio == 0 )
return(cont);
cont++;
}
return(-1);
} // FIM DO VERIFICADOR
int verifica_cod( int cod ) // VERIFICADOR DE CÓDIGO
{
int cont = 0;
while ( cont <= 200 )
{
if ( log[cont].cod == cod )
return(0);
cont++;
}
return(1);
} // FIM DO VERIFICADOR
void cadastroPedido(){ //Cadastro dos pedidos
system("cls");
int i;

int Option;
int OpcaoPedido;
char nomeCad[200];
printf("\nDigite seu nome como esta no cadastro: ");
gets(nomeCad);
for(i=0;i<200;i++){
if(strcmp(log.nome, nomeCad)==0){
do{
printf("\nEscolha o seu pedido: "); //PEDIDOS MERAMENTE ILUSTRATIVOS,
COLOQUEI SÓ PARA VER SE CONSEGUIA ANEXAR A 1 CADATRO MAS NÃO CONSEGUI.
printf("\n1- Pizza Calabresa");
printf("\n2- Pizza 4 Queijo");
printf("\n3- Pizza Margarita");
printf("\n4- Pizza Portuguesa\n");
scanf("%d", &OpcaoPedido);
if(OpcaoPedido == 1){
strcpy(log.clientePed.namePed, "Pizza Calabresa");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu
cadastro.",log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 2){
strcpy(log.clientePed.namePed, "Pizza 4 Queijo");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 3){
strcpy(log.clientePed.namePed, "Pizza Margarita");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
else if(OpcaoPedido == 4){
strcpy(log.clientePed.namePed, "Pizza Portuguesa");
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.",
log.clientePed.namePed);

printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: ");
scanf("%d", &Option);
i++;
}
}while(Option == 1);
system("cls");
}
}
} // FIM DO CADASTRO DE PEDIDOS.
void consultaCod (void) // CONSULTAR 1 CADASTRADO QUALQUER VIA CÓDIGO DADO
POR USUÁRIO.
{
int cont = 0, cod;
printf("\nEntre com o codigo\n");
scanf("%d",&cod);
fflush(stdin);
system("cls");
while ( cont <= 200 )
{
if (log[cont].cod==cod)
{
if (log[cont].vazio==1)
{
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone);
system ("pause");
system("cls");
break;
}
}
cont++;

if ( cont > 200 ){
printf("\nCodigo nao encontrado, pressione enter para volar ao menu principal\n");
getchar();
system("cls");
}
}
} // FIM DA FUNÇÃO CONSULTAR
void excluirCliente(void) // EXCLUI CLIENTE
{
int cod, cont = 0;
char resp;
printf("\nEntre com o codigo do registro que deseja excluir: \n");
scanf("%d", &cod );
while ( cont <= 200 )
{
if ( log[cont].cod == cod )
{
if (log[cont].vazio == 1 )
{
printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n",
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone);
getchar();
printf("\nDeseja realmente exlucir? s/n: ");
scanf("%s",&resp);
if ( ( resp == 'S' ) || ( resp == 's' ) )
{
log[cont].vazio=0;
log[cont].cod = NULL;
printf("\nExclusao feita com sucesso\n");
break;
}
else
{
if ( ( resp == 'N' ) || ( resp == 'n' ) )
{
printf("Exclusao cancelada!\n");
break;

}
}
}
}
cont++;
if ( cont > 200 )
printf("\nCodigo nao encontrado\n");
}
system("pause");
system("cls");
}

Teu programa tá em C e não em C++ :D

Link para o comentário
Compartilhar em outros sites

@The_Oicle Já que você está usando C++, uma possível abordagem poderia ser assim:

#include <iostream>
#include <map>

using std::map;
using std::string;
using std::cout;
using std::cin;
using std::getline;

int main() {
    map<string, string> combinacoes;
    combinacoes["AAAA"] = "1111";
    combinacoes["BBBB"] = "2222";
    combinacoes["CCCC"] = "3333";
    combinacoes["DDDD"] = "4444";
    combinacoes["EEEE"] = "5555";

    string usuario = "";
    string senha = "";

    bool aprovado = false;

    for (int i = 0; i < 3 && !aprovado; ++i) {
        do {
            cout << "Digite o usuário: ";
            getline(cin, usuario);
        } while (usuario.length() < 4 || usuario.length() > 8);

        do {
            cout << "Digite a senha: ";
            getline(cin, senha);
        } while (senha.length() < 4 || senha.length() > 8);

        for (map<string, string>::iterator iterator = combinacoes.begin(); iterator != combinacoes.end(); iterator++) {
            if (iterator->first == usuario && iterator->second == senha) {
                aprovado = true;
                break;
            }
        }
    }

    if (aprovado) {
        cout << "Bem vindo" << "\n";
    } else {
        cout << "Cai fora" << "\n";
    }
}

 

Link para o comentário
Compartilhar em outros sites

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