Ir para conteúdo
Fórum Script Brasil
  • 0

Alocação de memória


warkold

Pergunta

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


struct clientes
{
int cod_cliente;
char endereco[30];
int telefone;
char email[30];
}addcus;

struct Notas
{
int numero_NF;
int cod_cliente;
float total_geral;
}addnots;

struct Itens_Notas
{
int numero_NF;
int cod_produto;
int quant;
float preco_venda;
}additenots;

struct Produtos
{
int numero_NF;
char descricao[30];
int un;
float preco_un;
int quant_estq;
}addprod;

int alterar(struct clientes addcus,int clients)
{
int cont;
int i=0;
int cod_cliente,telefone;
char endereco[30];
char email[30];

printf("Digite o codigo do cliente\n");
fflush(stdin);
scanf("%i",&cod_cliente);

for(i=0;i=cont;i++);
{
// if(cod_cliente==addcus[i].cod_cliente)
{
// printf("endereco %s",addcus[i].endereco);

printf("Digite o novo endereco do %i",cod_cliente);
fflush(stdin);
gets(endereco);
printf("Digite o novo telefone do %i\n",cod_cliente);
fflush(stdin);
scanf("%i",&telefone);
printf("Digite o novo email do %i\n",cod_cliente);
fflush(stdin);
gets(email);
// endereco==addcus[clients].endereco;
}
}
}

int add(struct clientes addcus,unsigned int *clients)
{
printf("teste\n");

}





//void cadastro(struct clientes,struct Produtos,struct Notas,struct Itens_Notas,int *,int *,int *, int *);
void cadastro(struct clientes addcus,struct Produtos addprod,struct Notas addnots,struct Itens_Notas additenots,unsigned int *prodts,unsigned int *nots,unsigned int *itenots,unsigned int *clients ) // FUNÇÃO CADASTRAR
{



int menu=-1;

while(menu!=7)
{
printf("OPCAO CADASTRO!!!\n");
printf("Digite 1-Incluir Clientes\n");
printf("Digite 2-Alterar Clientes\n");
printf("Digite 3-Excluir Clientes\n");
printf("Digite 4-Incluir Produtos\n");
printf("Digite 5-Alterar Produtos\n");
printf("Digite 6-Excluir produtos\n");
printf("Digite 7-Sair do programa\n");
scanf("%i",&menu);
switch(menu)
{
case 1:
{


printf("Quantos clientes voce gostaria de cadastrar?\n");
fflush(stdin);
scanf("%i",&clients);
addcus =malloc(clients * sizeof(struct clientes));
add(addcus,clients);


}
break;
case 2:
{

}
break;
case 3:
{
break;
}
case 4:
{
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
case 7:
{
exit(1);
}
default:
{
printf("Opcao invalida");
break;
}
}

}

}





//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA


int main()
{
unsigned int *prodts=0,*nots=0,*itenots=0,*clients=0;
int op=0;

while(op!=4)
{
printf("Gerenciador de estoque!!!\n");
printf("Digite 1-Cadastro de produtos\n");
printf("Digite 2-Movimentação de produtos\n");
printf("Digite 3-Consulta de produtos\n");
printf("Digite 4-Sair do programa\n>>");
scanf("%i",&op);
switch(op)
{
case 1:
{
system("cls");
cadastro(addcus,addprod,addnots,additenots,prodts,nots,itenots,clients);

}
break;
case 2:
{

}
break;
case 3:
{

}
break;
case 4:
{
exit(1);
}
default:
{
printf("Opcao invalida");

}
break;
}

}
}
[/codebox]

[codebox]printf("Quantos clientes voce gostaria de cadastrar?\n");
fflush(stdin);
scanf("%i",&clients);
addcus =malloc(clients * sizeof(struct clientes));
add(addcus,clients);

Ta dando erro nessa linha.

invalid operands of types `unsigned int*' and `unsigned int' to binary `operator*'

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

no match for 'operator=' in 'addcus = malloc(((*clients) * 72u))'

candidates are: clientes& clientes::operator=(const clientes&)

=/

Nem desse jeito da certo

unsigned int x=0;
printf("Quantos clientes voce gostaria de cadastrar?\n");
fflush(stdin);
scanf("%i",&x);
if(x<=5)
{
printf("Serao cadastrados %i clientes(max %i)\n",x,clients);
addcus = malloc((x)*sizeof(struct clientes));
if(!addcus)
{
printf("Falha na alocacao de memoria\n");
exit(1);

}
clients=clients -x;
}
else
{
printf("Voce extrapolou o limit de %i clientes\n",clients);
exit(1);
}[/codebox]

na declaração do clients int unsigned clients = 5;

Link para o comentário
Compartilhar em outros sites

  • 0

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


struct clientes
{
int cod_cliente;
char endereco[30];
char telefone[9];
char email[30];
}*addcus;

struct Notas
{
int numero_NF;
int cod_cliente;
float total_geral;
}*addnots;

struct Itens_Notas
{
int numero_NF;
int cod_produto;
int quant;
float preco_venda;
}*additenots;

struct Produtos
{
int numero_NF;
char descricao[30];
int un;
float preco_un;
int quant_estq;
}*addprod;

void excluir(struct clientes *addcus,struct Notas *addnots,int clients,int nots)
{
int cod_cliente;
printf("Digite o codigo do cliente para ser excluido\n");
fflush(stdin);
scanf("%i",&cod_cliente);
for(int x=0;x=5;x++)
{
if(cod_cliente==addcus[x].endereco[0])
{
printf("Cliente não existente\n");
}
else
{
printf("Cliente encontrado");
}
}
}














void alterar(struct clientes *addcus,int clients)
{
register int i=0;
char endereco[30];
int cod_cliente='';
int telefone='';
char email[30];

printf("Digite o codigo do cliente\n");
fflush(stdin);
scanf("%c",endereco);

for(i=0;i=5;i++)
{
if(addcus[i].endereco==endereco)
{
printf("Digite o endereco do cliente\n");
fflush(stdin);
gets(endereco);
printf("Digite o telefone do cliente\n");
fflush(stdin);
scanf("%i",&telefone);
printf("Digite o email do cliente\n");
fflush(stdin);
scanf("%i",&cod_cliente);
}
}
}

void add(struct clientes *addcus,int clients)
{

//ARRUMAR CODIGO REPETIDO
register int x=0;
do
{
printf("Quantos clientes voce gostaria de cadastrar?\n");
fflush(stdin);
scanf("%i",&x);
if(x>5)
{
printf("Voce extrapolou o limite de 5 clientes\n");
getchar();
getchar();
system("cls");
}
}while(x>5);
printf("Serao cadastrados %i clientes(max %i)\n",x,clients);
addcus =(struct clientes*)malloc((x) * sizeof(struct clientes));

if(!addcus)
{
printf("Falha na alocacao de memoria\n");
exit(1);

}



for(int i=0;i<x;i++)
{
printf("Digite o codigo do cliente %i\n",i+1);
fflush(stdin);
scanf("%i",&addcus[i].cod_cliente);
printf("Digite o endereco do cliente %i\n ",i+1);
fflush(stdin);
scanf("%s",&addcus[i].endereco);
printf("Digite o telefone do cliente %i\n",i+1);
fflush(stdin);
gets(addcus[i].telefone);
printf("Digite o email do cliente %i\n",i+1);
fflush(stdin);
scanf("%s",&addcus[i].email);

}
clients=clients-x;
printf("Ainda restam %i para ser cadastrados",clients);
system("PAUSE");

}





//void cadastro(struct clientes,struct Produtos,struct Notas,struct Itens_Notas,int *,int *,int *, int *);
void cadastro(struct clientes *addcus,struct Produtos *addprod,struct Notas *addnots,struct Itens_Notas *additenots,int *prodts,int *nots, int *itenots, int *clients ) // FUNÇÃO CADASTRAR
{



int menu=-1;

while(menu!=7)
{
printf("OPCAO CADASTRO!!!\n");
printf("Digite 1-Incluir Clientes\n");
printf("Digite 2-Alterar Clientes\n");
printf("Digite 3-Excluir Clientes\n");
printf("Digite 4-Incluir Produtos\n");
printf("Digite 5-Alterar Produtos\n");
printf("Digite 6-Excluir produtos\n");
printf("Digite 7-Sair do programa\n");
scanf("%i",&menu);
switch(menu)
{
case 1:
{
int clients=5;
add(addcus,clients);

}
break;
case 2:
{
int clients=clients;;
alterar(addcus,clients);
}
break;
case 3:
{
int clients =5;
int nots=10;
excluir(addcus,addnots,clients,nots);

}
break;
case 4:
{
break;
}
case 5:
{
break;
}
case 6:
{
break;
}
case 7:
{
exit(1);
}
default:
{
printf("Opcao invalida");
break;
}
}
}
}





//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA//PROGRAMA


int main()
{
int *prodts;
int *nots;
int *itenots;
int *clients;
int op=0;

while(op!=4)
{
printf("Gerenciador de estoque!!!\n");
printf("Digite 1-Cadastro de produtos\n");
printf("Digite 2-Movimentação de produtos\n");
printf("Digite 3-Consulta de produtos\n");
printf("Digite 4-Sair do programa\n>>");
scanf("%i",&op);
switch(op)
{
case 1:
{
system("cls");
cadastro(addcus,addprod,addnots,additenots,prodts,nots,itenots,clients);

}
break;
case 2:
{

}
break;
case 3:
{

}
break;
case 4:
{
exit(1);
}
default:
{
printf("Opcao invalida");

}
break;
}
}
}
[/codebox]

Agora ta dando error nessa função

[codebox]void alterar(struct clientes *addcus,int clients)
{
register int i=0;
char endereco[30];
int cod_cliente='';
int telefone='';
char email[30];

printf("Digite o codigo do cliente\n");
fflush(stdin);
scanf("%c",endereco);

for(i=0;i=5;i++)
{
if(addcus[i].endereco==endereco)
{
printf("Digite o endereco do cliente\n");
fflush(stdin);
gets(endereco);
printf("Digite o telefone do cliente\n");
fflush(stdin);
scanf("%i",&telefone);
printf("Digite o email do cliente\n");
fflush(stdin);
scanf("%i",&cod_cliente);
}
}
}

Eu cadastro o usuario..porém quando peço para alterar os dados o programa fecha com error...

Tentei colocar int cont=length(clients); para colocar no lugar do "i=5"

Só que fala

`length' undeclared (first use this function)

Editado por warkold
Link para o comentário
Compartilhar em outros sites

  • 0
Não tem alocar uma struct sem ela ser ponteiro?

se ela não é ponteiro, ela já é alocada na hora da declaracao. mas so um unico indice. se você declarar como array ele vai alocar mais indices, mas você vai ter q passar o numero de indices na hora de declaracao e depois não sera possivel adicionar mais indices.

Eu cadastro o usuario..porém quando peço para alterar os dados o programa fecha com error...

Tentei colocar int cont=length(clients); para colocar no lugar do "i=5"

Só que fala

`length' undeclared (first use this function)

o melhor é você guardar numa variavel o numero de indices alocados da struct. cada vez q você alocar você soma 1 nessa variavel. ai você faz esse for baseado nessa variavel.

pelo q entendi, você ta tentando fazer alguma coisa nesse sentido com a variavel clients. entretanto, desse jeito, declarando-a dentro de cada opcao do switch() não vai te ajudar em nd, porque depois q ele terminar a execucao do case, o valor vai se perder. você devia declara-la la em cima, onde você ta declarando a struct.

Link para o comentário
Compartilhar em outros sites

  • 0

a não, você declara assim:

int clients= 5;

e note q você não vai precisar passa-la como parametros pras funcoes como você tava fazendo anteriormente. se você declara-la la em cima junto com as structs, ela podera ser acessada diretamente em qualquer parte do programa.

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi, mas por exemplo..

Usuario vai cadastrar 2 clientes.. o maximo é 5..

Faz todos os passos.cod_cliente,endereço.

Ele volta pra segunda opção

Usuario,novamente, quer cadastrar +2 clientes.

(...)

Usuario.... quer cadastrar +1 cliente.

Ou seja, ele chegou no limite que é 5.

Como eu faço que o" clients" fique diminuindo com o valor q o usuario digitou, seja 1,2,3,4,5,.Para que o cliets não fique resetando para o default que é 5.Ou seja, toda hora que ele for entrar no cadastrar(com o programa aberto), a função avise "OLHA, AINDA RESTAM 3 espaços"...

Editado por warkold
Link para o comentário
Compartilhar em outros sites

  • 0

hum o clients so vai resetar pra 5 se em alguma parte do codigo você estiver fazendo isso explicitamente.

se tiver em alguma parte do codigo a linha:

clients= 5;

você deveria retira-la, a não ser q em algum momento você queira q o clients realmente resete.

logicamente, na linha da declaracao sim a atribuicao deve permanecer.

Link para o comentário
Compartilhar em outros sites

  • 0

Então, quando eu chamo a função alterar eu quero q o for(i=0;i=x;i++) use o X que o usuario digitou quando foi cadastrar clientes...

Tem como?

E ta dando problema quando eu faço if(cod_cliente== addcus.cod_cliente)

cod_cliente= codigo q o usuario vai digitar para procurar nas structs e achar o correto para poder alterar o endereço,email,telefone

Link para o comentário
Compartilhar em outros sites

  • 0
Então, quando eu chamo a função alterar eu quero q o for(i=0;i=x;i++) use o X que o usuario digitou quando foi cadastrar clientes...

Tem como?

tem sim, você so tem q declarar a variavel x de novo la onde você declarou a clients, assim ela pode ser acessada a partir de qualquer funcao dentro do programa.

E ta dando problema quando eu faço if(cod_cliente== addcus.cod_cliente)

cod_cliente= codigo q o usuario vai digitar para procurar nas structs e achar o correto para poder alterar o endereço,email,telefone

q problema exatamente esta ocorrendo??

Link para o comentário
Compartilhar em outros sites

  • 0
E ta dando problema quando eu faço if(cod_cliente== addcus.cod_cliente)

cod_cliente= codigo q o usuario vai digitar para procurar nas structs e achar o correto para poder alterar o endereço,email,telefone

Se addcus estiver declarada como ponteiro, você acessa os membros da classe com "->" e não ".".

if(cod_cliente== addcus[i]->cod_cliente)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...