Stack Overflow em Português Asked by Larissa Benevides Vieira on January 12, 2021
O programa deve alocar dinamicamente a struct e passar ela como parâmetro.
#include <stdio.h>
#include <stdlib.h>
typedef struct cadastro_de_mercadoria{
int codigo;
int estoque;
} CADASTRO;
void printar(CADASTRO cadastruu, int N){
printf("nn---------RESULTADO DOS PEDIDOS DOS CLIENTES-------nn");
for(int l=0; l<N; l++){
printf("Código da mercadoria %d: %d n",l+1,cadastruu[l].codigo);
printf("Quantidade da mercadoria no estoque: %d ", cadastruu[l].estoque);
printf("nn");
}
}
int main(){
CADASTRO *cadastro;
int N, k, codcli, estoquecli, escolha, encontrado=0;
k=0;
printf("Entre com o número de mercadorias: ");
scanf("%d", &N);
cadastro = (CADASTRO *)malloc(N * sizeof(CADASTRO));
if(cadastro == NULL){
printf("Muita memoria!n");
return 1;
}
else{
//cadastro das mercadorias
for(int i=0; i<N; i++){
printf ("Entre com o código da mercadoria %d: ",i+1);
scanf ("%d%*c", &cadastro[i].codigo);
printf ("Entre com o estoque da mercadoria %d: ", i+1);
scanf ("%d%*c", &cadastro[i].estoque);
printf ("n");
}
}
//consulta da mercadoria
printf ("----------PEDIDOS DOS CLIENTES----------nn");
while(1){
printf ("Entre com o código da mercadoria: ");
scanf ("%d%*c", &codcli);
encontrado=0;
for(int j=0; j<N; j++){
if(cadastro[j].codigo==codcli){
printf ("Entre com o estoque da mercadoria: ");
scanf ("%d", &estoquecli);
if(cadastro[j].estoque>=estoquecli){
cadastro[j].estoque = cadastro[j].estoque - estoquecli;
printf ("ESTOQUE ATUALIZADOn");
}
else{
printf ("ESTOQUE INSUFICIENTE!n");
}
k=1;
}
}
if(k==0){
printf ("MERCADORIA NÃO ENCONTRADA!n");
}
k=0;
printf("Deseja enviar outra solicitacao? (Sim: 1/Não: 0):: ");
encontrado=0;
scanf("%d", &escolha);
if(escolha==0)
break;
}
printar(cadastro, N);
free(cadastro);
return 0;
}
O erro básico é que o parâmetro não está declarado como ponteiro. Se a variável local foi declarada com ponteiro o argumento será um ponteiro, então o parâmetro também será, o que faz sentido. Melhorando tudo ficaria assim (dá pra melhorar bem mais):
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int codigo;
int estoque;
} Cadastro;
void imprimir(Cadastro *cadastro, int n) {
printf ("nn---------RESULTADO DOS PEDIDOS DOS CLIENTES-------nn");
for (int i = 0; i < n; i++) {
printf("Código da mercadoria %d: %d n", i + 1, cadastro[i].codigo);
printf("Quantidade da mercadoria no estoque: %dnn", cadastro[i].estoque);
}
}
int main() {
int n;
printf ("Entre com o número de mercadorias: ");
scanf ("%d", &n);
Cadastro *cadastro = malloc(n * sizeof(Cadastro));
if (cadastro == NULL) {
printf("Proberlmas de alocação de memoria!n");
return 1;
} else {
for (int i = 0; i < n; i++) {
printf ("Entre com o código da mercadoria %d: ",i+1);
scanf ("%d%*c", &cadastro[i].codigo);
printf ("Entre com o estoque da mercadoria %d: ", i+1);
scanf ("%d%*cn", &cadastro[i].estoque);
}
}
printf ("----------PEDIDOS DOS CLIENTES----------nn");
while (1) {
printf ("Entre com o código da mercadoria: ");
int codcli;
scanf ("%d%*c", &codcli);
int achou = 0;
for (int i = 0; i < n; i++) {
if (cadastro[i].codigo == codcli) {
printf ("Entre com o estoque da mercadoria: ");
int estoquecli;
scanf ("%d", &estoquecli);
if (cadastro[i].estoque >= estoquecli){
cadastro[i].estoque -= estoquecli;
printf ("ESTOQUE ATUALIZADOn");
} else printf ("ESTOQUE INSUFICIENTE!n");
achou = 1;
}
}
if (achou == 0) printf ("MERCADORIA NÃO ENCONTRADA!n");
printf ("Deseja enviar outra solicitacao? (Sim: 1/Não: 0):: ");
int escolha;
scanf ("%d", &escolha);
if (escolha == 0) break;
}
imprimir(cadastro, n);
free(cadastro);
}
Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.
Correct answer by Maniero on January 12, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP