2016-03-30 21 views
0

Bazı bilgileri edinmek için bir kod yapıyorum, bir "struct" yapın ve sonra bunları listeleyin.scanf çalışmıyor. Float okumak, tutmak, sonra okumak

İstediğim tüm bilgileri ekleyebilirim, ancak okuduğumda kayan değerler yanlış. Kodda bir hata yaptığımı veya herhangi bir kodu yanlış kullanıp kullanmadığımı göremiyorum.

Tamamlanmadı, yine de birkaç tane daha özellik eklemem gerekiyor ve menümüm iyi çalışmıyor, bu yüzden sorun değil.

Sadece 1 numaralı menüde 1, 2, 1'de ise Dahil Et, 2'si Liste ve 3'ü Hariç Tutmak içindir. İşte

kod bazı kısımları geçerli:

#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

printf ("\ n ------------------------- \ nCodigo:% s \ nDescri cao:% 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) '. "Float" için yanlış format belirteci kullanılır. – kaylum

+0

Ve BTW, scanf() 'dan dönüş değerini test etmiyor, her zaman sürprizler için bir reçete. Artı, bu 'ana', 'geçersiz ana' değil C. – Jens

+0

Teşekkür ederim, ama sadece başladım, öğretmen henüz bunun için endişelenmenize gerek olmadığını söylüyor. Ve ana hakkında, ben değişeceğim. – DimplyKhan13

cevap

0

% f float değerleri değil,% d

Değişim yazdırmak için gereklidir:

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

için:

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

Evet, Teşekkürler, çözüldü, ama şimdi 12.3'e girdiğimde sayı 12.299999 gibi görünüyor. Noktadan sonra sadece 2 basamakta düzeltebilir miyim? – DimplyKhan13

+0

Bu gerçekten farklı bir soru ve bu şekilde gönderilmelidir. Ama kısaca '% .2f' – AJNeufeld

+0

Çok teşekkür ederim. – DimplyKhan13

İlgili konular