Problema com scanf (aparentemente). [RESOLVIDO]

1. Problema com scanf (aparentemente). [RESOLVIDO]

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 19/05/2010 - 12:02h

Olá pessoal...

Sou novo no forum, uso linux a pouco tempo e programo em C a menos tempo ainda, mas agredeceria muito se algem pudesse me ajudar.

Estou fazendo um trabalho para a faculdade, onde preciso criar um cadastro de produtos (bem simples, sem utilizar banco de dados).

O problema é que aparentemente o scanf simplesmente não está funcionando. Não sei se isso pode ser devido a alguma passagem de parametro errada ou outra coisa, mas nem meu professor, olhando rapidamente o código, soube me dizer o que está acontecendo.

Segue a parte que interessa do código abaixo:

// Início e opção 6.

int quantidade(float *custo_prod, float *lucro_prod)

{

int quant_prod, i;



printf("<Manipulacao de Preços>\n\n");

printf("Digite a quantidade de produtos a ser cadastrado:\n");

scanf("%d", &quant_prod);
// Isso não funciona de jeito nenhum.
custo_prod = calloc (quant_prod, sizeof(float));

lucro_prod = calloc (quant_prod, sizeof(float));

for (i = 0; i < quant_prod; i++)

{

custo_prod[i] = 0;

lucro_prod[i] = 0;

}

return (quant_prod);

}





// Opção 1.

void cadastro(int quant_prod, float *custo_prod, float *lucro_prod)

{

int i=0;

char sair[2]="s";



while (i < quant_prod && sair[0] != 'n')

{

if (custo_prod[i] == 0)

{

system("clear");

printf("Degite o Custo do Produto %d \n", i);

scanf("%f", &custo_prod[i]);

printf("Digite a margem de lucro para o produto %d \n\n", i);

scanf("%f", &lucro_prod[i]);

printf("Deseja cadastrar outro produto?");

printf("Obs.: Digite s para Sim ou n para Nao.");

scanf("%s", sair);

i++;

}

}

}



int main()

{

float *custo_prod, *lucro_prod;

int op, quant_prod;

char confirma[2];



quant_prod = quantidade(custo_prod, lucro_prod);



do {

system("clear");

printf("<Manipulação de Preços>\n\n");

printf("Selecione uma opção:\n\n");

printf("1 - Cadastrar Produto.\n");

printf("2 - Listar Produtos (Custo e Venda).\n");

printf("3 - Ajustar valor de venda para todos os produtos.\n");

printf("4 - Ajustar valor de venda por faixa de preço.\n");

printf("5 - Remover produto cadastrado.\n");

printf("6 - Alterar quantidade de produtos e resetar os dados.\n");

printf("7 - Encerrar o Sistema.\n");

printf("7 - Encerrar o Sistema.\n");



scanf("%d", &op);
// Tambem não está funcionando.


switch (op)

{

case 1:

cadastro(quant_prod, custo_prod, lucro_prod);

break;

case 2:

lista(quant_prod, custo_prod, lucro_prod);

break;

case 3:



break;

case 4:



break;

case 5:

remov_cadastro(quant_prod, custo_prod, lucro_prod);

break;

case 6:

printf("Tem certeza que deseja excluir o cadastro atual e criar um novo?");

printf("Obs: Todos os produtos cadastrados atualmente serão perdidos.");

scanf("%s", confirma);

if (confirma[0] == 's')

{

free(custo_prod);

free(lucro_prod);

quantidade(custo_prod, lucro_prod);

}

break;

case 7:

break;

default:

printf("Opção Inválida...");

printf("Digite Novamente.");

break;

}

} while (op != 7);

free(custo_prod);

free(lucro_prod);

}


Enfim. Nenhum scanf está armazenando o valor digitado pelo usuário na variável desejada.
já testei colocando um printf("%d", variável) abaixo delas e ele simplesmente não retorna nada.

Por favor. Se algem puder me ajudar, ficarei muito agradecido.


  


2. Observação...

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 19/05/2010 - 12:11h

Se me disserem o porque de não estar lendo a variável quant_prod na função quantidade e a variável op a ser utilizada no switch case já está de ótimo tamanho.

Muito obrigado.


3. Re: Problema com scanf (aparentemente). [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/05/2010 - 12:12h

Bom, olhei meio por cima, mas nessa declaração não teria que ser um array?

int quant_prod


4. Resposta p5ych0 ...

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 19/05/2010 - 12:18h

como assim array? um vetor?

está declarada a variável como int quant_prod. Tanto na função quanto no main.

essa variável é apenas para definir quantos espaços o usuário deseja criar no vetor custo_prod e lucro_prod (alocação dinamica). É um valor inteiro.

E só para constar. As bibliotecas que usei são:
#include <stdio.h>

#include <stdlib.h>

Muito obrigado. Se puder me esplicar melhor agradeço.


5. Re: Problema com scanf (aparentemente). [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/05/2010 - 12:40h

Agora que reparei!
confundi custo_prod[i] com o quant_prod!

Bom, pro switch eu usaria o getchar():

op = getchar();

O getchar retorna o valor do caractere digitado.


6. Re: Problema com scanf (aparentemente). [RESOLVIDO]

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 19/05/2010 - 13:01h

mesmo com getchar() continua dando o mesmo problema.

O programa se quer entra na tela de cadastro.


7. Solução...

Danilo Roberto Floriano
dafloria

(usa Ubuntu)

Enviado em 19/05/2010 - 13:55h

Consegui resolver o problema.

A solução foi jogar para dentro do main todo o código da função quantidade e elimina-la. Não ficou da forma como eu queria, mas pelo menos está funcionando.

Provavelmente existe algum problema em alocar uma variável dinamica fora da função onde ela foi criada (deve ser isso!?!?!?!).

O problema não era o scanf.

Mas o engraçado é que um printf após o scanf não pegava nada na variável lida pelo scanf enquanto a função quantidade existia.

Não entendi muito bem mas até que a solução foi rasoável.

Muito obrigado pela ajuda...


8. Re: Problema com scanf (aparentemente). [RESOLVIDO]

Jardel D. Berti
killlers

(usa Ubuntu)

Enviado em 19/05/2010 - 14:07h

Exatamente, a variável só funciona dentro da função...

da uma olhada nesse site para entender melhor

http://gracianotorrao.wordpress.com/2008/05/19/funcoes-passagem-de-parametros-por-valorreferencia-em...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts