Ir ao conteúdo
  • Cadastre-se

C problema para pega a strucks e fazer calculo


Posts recomendados

esse código cadastra a pessoa e faz a ligação dela como se fosse um banco porém esta dando erro pois não consigo pega a parte da strucks

<

#include<stdio.h>
#include<stdlib.h>
struct cadastro
{
    char cpf[50][50];
    char nome[50][50];
    char rg[50][50];
}pessoa;
struct banco
{
    int ndc[50];
    int saldo[50];
    int saquef[50];
    int transf[50];
    int depositof[50];
}conta;
int menu()
{
    printf("\n0. sair");
    printf("\n1. cadastrar nova conta");
    printf("\n2. depositar um valor na conta");
    printf("\n3. tranferenca de conta ");
    printf("\n4. saque valor da conta");
    printf("\n5. extrato bancario");
    printf("\n escolha sua opção:");

}
int main()
{
    int cont=1,opcao,conta,valor,ctrans,i,j;
    char x1[50] , x2[50] , x3[50] , x4[50] , x5[50] , x6[50] , x7[50] , x8[50] , x9[50], D1[50] , D2[50];
    short cpfval, CPF, cpf2;
    printf("\nqual o seu cpf: ");
    scanf("%s",pessoa.cpf[0]);
    printf("\nqual o seu nome: ");
    scanf("%s",pessoa.nome[0]);
    printf("\nqual o seu rg: ");
    scanf("%s",pessoa.rg[0]);
    CPF=pessoa.cpf[0]/100;
    x1 = CPF /100000000;
    x2 = (CPF/10000000)%10;
    x3 = (CPF/1000000)%10;
    x4 = (CPF/100000)%10;
    x5 = (CPF/10000)%10;
    x6 = (CPF/1000)%10;
    x7 = (CPF/100)%10;
    x8 = (CPF/10)%10;
    x9 = CPF%10;
    D1 = ((x1*10)+(x2*9)+(x3*8)+(x4*7)+(x5*6)+(x6*5)+(x7*4)+(x8*3)+(x9*2))%11;
    if(D1<2)
        D1 = 0;
    else
    {
        D1 = 11 - D1;
    }
        D2 = ((x1*11)+(x2*10)+(x3*9)+(x4*8)+(x5*7)+(x6*6)+(x7*5)+(x8*4)+(x9*3)+(D1*2))%11;
    if(D2<2)
    {
        D2=0;
    }
    else
    {
        D2=11 - D2;
    }
    if(D1<0||D2<0)
    {
        printf("numero invalido o programa sera encerrado!");
        exit(0);
    }
    conta.ndc[0]=rand()%5000000;
    printf("\n o numero da sua conta é: %d",conta.ndc[0]);
    system("pause");
    system("cls");
    menu();
    printf("escolha sua opção: ");
    scanf("%d",&opcao);
    do
    {

        menu();
        scanf("%d",opcao);
        switch(opcao)
        {
            case 1:
            printf("\nqual o seu cpf: ");
            scanf("%s",pessoa.cpf[cont]);
            printf("\nqual o seu nome: ");
            scanf("%s",pessoa.nome[cont]);
            printf("\nqual o seu rg: ");
            scanf("%s",pessoa.rg[cont]);
            x1 = CPF /100000000;
            x2 = (CPF/10000000)%10;
            x3 = (CPF/1000000)%10;
            x4 = (CPF/100000)%10;
            x5 = (CPF/10000)%10;
            x6 = (CPF/1000)%10;
            x7 = (CPF/100)%10;
            x8 = (CPF/10)%10;
            x9 = CPF%10;
            D1 = ((x1*10)+(x2*9)+(x3*8)+(x4*7)+(x5*6)+(x6*5)+(x7*4)+(x8*3)+(x9*2))%11;
            if(D1<2)
            {
                D1 = 0;
            }
            else
            {
                D1 = 11 - D1;
            }
            D2 = ((x1*11)+(x2*10)+(x3*9)+(x4*8)+(x5*7)+(x6*6)+(x7*5)+(x8*4)+(x9*3)+(D1*2))%11;
            if(D2<2)
            {
                D2=0;
            }
            else
            {
                D2=11 - D2;
            }
            if(D1<0||D2<0)
            {
                printf("numero invalido o programa sera encerrado!");
                exit(0);
            }
            cont++;
            break;
            case 2:
                printf("\n qual o numero da conta: ");
                scanf("%d",&conta);
                for(i=0;i<cont;i++)
                {
                    if(conta==conta.ndc)
                    {
                        printf("\nquanto deseja deposita: ");
                        scanf("%d",&valor);
                        if(valor<=conta.saldo)
                        {
                            conta.saldo+=saldo;
                            conta.depositof+=saldo;
                        }
                        break;
                    }
                }
                break;
            case 3:
                printf("\n qual o numero da conta: ");
                scanf("%d",&conta);
                for(i=0;i<cont;i++)
                {
                    if(conta==conta.ndc)
                    {
                        printf("\n qual o numero da conta que você ira transferir: ");
                        scanf("%d",&ctrans);
                        for(j=0;j<cont;j++)
                        {
                            if(ctrans==conta.ndc[j])
                            {
                                printf("\nqual o valor que deseja transferir: ");
                                scanf("%d",valor);
                                if(valor<=conta.saldo)
                                {
                                    printf("\nvalor transferido com sucesso!");
                                    conta.saldo-=valor;
                                    conta.saldo[j]+=valor;
                                    conta.transf+=valor;
                                }
                                else
                                {
                                    printf("saldo insuficiente!");
                                }
                            }
                        }
                    }
                }
                if(i==cont)
                {
                    printf("conta não cadastrada");
                }
            break;
            case 4:
                printf("\n qual o numero da conta: ");
                scanf("%d",&conta);
                for(i=0;i<cont;i++)
                {
                    if(conta==conta.ndc)
                    {
                        printf("\ndigite o valor da retirada: ");
                        scanf("%d",&valor);
                        if(valor==conta.saldo)
                        {
                            Printf("\nsaque realizado com sucesso!");
                            conta.saldo-=valor;
                            conta.saquef+=valor;
                        }
                        else
                        {
                            printf("valor insuficiente!");
                        }
                    }
                }
                if(i==cont)
                {
                    printf("conta não cadastrada");
                }
            break;
            case 5:
                printf("\n qual o numero da conta: ");
                scanf("%d",&conta);
                for(i=0;i<cont;i++)
                {
                    if(conta==conta.ndc)
                    {
                        printf("\nsaques: %d",conta.saquesf);
                        printf("\ntransferencias: %d",conta.trnsf);
                        printf("\ndepositos: %d",conta.depositof);
                    }
                }
                if(i==cont)
                {
                    printf("conta não cadastrada");
                }
            system("pause");
            system("cls");
            menu();
            printf("escolha sua opção: ");
            scanf("%d",&opcao);
        }
    }while(opcao==0);
}
>

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

@João Vitor Sacramento Rocha     esse  <>  não é o sinal menor que e maior que não ,  ele é hum botão que está desenhado lá na barra de ferramentas da janela de postar  ,   não usando ele seu código ficará faltando alguns caracteres  ,  e seu código está bom  ,  mas em qual parte você está se referindo que não consegue pegar ?  pelo que pude ver um erro é por que você está tentando dividir um char por hum  inteiro na linha 38 ,  não se pode fazer operações aritméticas com tipos char ,  precisa converter para int ou long ou double ou float usando o comando  atoi  " array para inteiro ,  e essa parte do seu código poderia ser assim  :

int main()
{
    int cont=1,opcao,conta,valor,ctrans,i,j;
    char x1[50],x2[50],x3[50],x4[50],x5[50],x6[50],x7[50],x8[50],x9[50],D1[50],D2[50];
    short cpfval, CPF, cpf2;
    printf("\nqual o seu cpf: ");
    scanf("%s",pessoa.cpf[0]);
    printf("\nqual o seu nome: ");
    scanf("%s",pessoa.nome[0]);
    printf("\nqual o seu rg: ");
    scanf("%s",pessoa.rg[0]);
    CPF=(int)pessoa.cpf[0]/100;
    strcpy(x1,(char)CPF /100000000);
    strcpy(x2,(char)(CPF/10000000)%10);
    strcpy(x3,(char)(CPF/1000000)%10);
    strcpy(x4,(char)(CPF/100000)%10);
    strcpy(x5,(char)(CPF/10000)%10);
    strcpy(x6,(char)(CPF/1000)%10);
    strcpy(x7,(char)(CPF/100)%10);
    strcpy(x8,(char)(CPF/10)%10);
    strcpy(x9,(char)CPF%10);
    strcpy(D1,((atoi(x1)*10)+(atoi(x2)*9)+(atoi(x3)*8)+(atoi(x4)*7)+
               (atoi(x5)* 6)+(atoi(x6)*5)+(atoi(x7)*4)+(atoi(x8)*3)+
               (atoi(x9)* 2))%11);
    if(atoi(D1)<2)
        strcpy(D1,"0");
    else
    {
        strcpy(D1,(char)(11 - stoi(D1)));/* fazer como na linha de cima e os outros também */
    }
        D2 = ((x1*11)+(x2*10)+(x3*9)+(x4*8)+(x5*7)+(x6*6)+(x7*5)+(x8*4)+(x9*3)+(D1*2))%11;
    if(D2<2)
    {
        D2=0;
    }
    else

 

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

pessoa.cpf[ i ] é um vetor de caracteres armazenando uma string de dígitos, é preciso transformar a string de dígitos em um número inteiro antes de realizar cálculos com o número inteiro, para isso use a função atoi() da biblioteca stdlib.h que serve exatamente para fazer isso.

 

https://en.cppreference.com/w/c/string/byte/atoi

 

 

Leia minha assinatura abaixo para ver como postar código no fórum sem que o fórum faça alterações no seu código, como aconteceu no seu código onde todos os [ i ] sem espaços sumiram.

  • Curtir 1
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...