scanf无法正常工作。需要阅读浮动,保留,然后阅读它

时间:2016-03-30 22:13:58

标签: c scanf

我制作代码以获取一些信息,制作一个" struct",然后列出它们。

我可以添加我想要的所有信息,但是当我读取它们时,浮点值是错误的。 我无法查看是否在代码上犯了错误,或者使用了任何错误代码。

这还不完整,我还需要添加更多功能,而且我的菜单效果不佳,所以不要介意它。

在菜单1中,只有1个正在工作,而在菜单2上,1表示包含,2表示列表,3表示排除。

以下是代码的一些部分:

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

#define ESTOQUEtamanho 10

struct PRODUTO {
    char codigo[20];
    char descricao[100];
    int quantidade;
    float precoCusto;
    float precoVenda;
    char livre;
};

struct PRODUTO estoque[ESTOQUEtamanho];



void inicializa(){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++)
        estoque[i].livre=1;
}
int insereEstoque (char *c, char *d, int q, float pC, float pV){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++) {
        if (estoque[i].livre) {
           strcpy(estoque[i].codigo, c);
           strcpy(estoque[i].descricao, d);
           estoque[i].quantidade = q;
           estoque[i].precoCusto = pC;
           estoque[i].precoVenda = pV;
           estoque[i].livre=0;
           return(1);
        }
    }
    return(0);
}
void listarEstoque(){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++)
       if (!estoque[i].livre)
             printf("\n-------------------------\nCodigo: %s\nDescricao: %s\nQuantidade: %d\nPreco de Custo: %d\nPreco de Venda: %d", estoque[i].codigo, estoque[i].descricao, estoque[i].quantidade, estoque[i].precoCusto, estoque[i].precoVenda);
}
int excluirEstoque (char *c){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++){
        if(!estoque[i].livre)
            if(!strcmp(c, estoque[i].codigo)){
                estoque[i].livre = 1;
                return(1);
            }
    }
    return(0);
}

void main(){


    int opc1, opcEstoque;

    char codigo[20], descricao[100];
    int quantidade;
    float precoCusto, precoVenda;

    inicializa();

    while (1) {
        printf("\n-------------------------------\nControle de Estoque\n\tOpcoes:\n\t1-Estoque\n\t2-Cliente\n\t3-Vendedor\n\t4-Venda\n\nEntre com sua opcao: ");
        opc1=getchar();getchar();
        switch (opc1) {
            case '1': printf("\n-------------------------------\nEstoque\n\tOpcoes:\n\t1-Incluir\n\t2-Listar\n\t3-Excluir\n\t0-Voltar\n\nEntre com sua opcao:");
                opcEstoque=getchar();getchar();
                switch (opcEstoque) {    printf("\nEntre com o nome: ");
                    case '1':printf("\nEntre com o codigo: ");
                        gets(codigo);
                        printf("\nEntre com a descricao: ");
                        gets(descricao);
                        printf("\nEntre com a quantidade: ");
                        scanf("%d", &quantidade);
                        printf("\nEntre com o preco de custo: ");
                        scanf("%f", &precoCusto);
                        printf("\nEntre com preco de venda: ");
                        scanf("%f", &precoVenda);
                        if (insereEstoque (codigo, descricao, quantidade, precoCusto, precoVenda)) printf("\nProduto Incluso");
                        else printf("\nFalha na inclusao");
                        break;
                    case '2': listarEstoque();
                        break;
                    case '3': printf("\nEntre com o codigo para excluir: ");
                        gets(codigo);
                        if (excluirEstoque (codigo)) printf("\nProduto Excluido");
                        else printf("\nFalha na exclusao");
                        break;
                    default: printf("\nOpção não implementada! ");
                        break;
                }break;
        }
    }
}`

1 个答案:

答案 0 :(得分:0)

打印浮点值需要

%f,而不是%d

变化:

printf("...Preco de Custo: %d\nPreco de Venda: %d"...);

为:

printf("...Preco de Custo: %f\nPreco de Venda: %f"...);