Ir ao conteúdo
  • Cadastre-se

Struct - problema ao compilar (printf,scanf)


r1castro1

Posts recomendados

:atirador:Bom dia pessoal! Estou aprendendo C/C++ e não sei mais o que fazer para resolver esse problema que parece simples, pois ao compilar o programa, ele mistura os 'printf's '. Alguém podeira me dar uma mãozinha?

 

Eis a questão:

//Crie um programa que contenha uma struct doceira que contém os seguintes atributos:
//tipo de doce
//preço
//marca
//dietético (aceita os valores: sim ou não)
//O programa deverá ter uma variável para esta struct, e deve pedir ao usuário que informe os valores desses atributos.
//O programa deverá ler 5 doceiras e contar quantos são dietéticos.

 

#include <stdio.h>
#include <string.h>
struct doceira
{
char tipo;
float preco;
char marca;
char dietetico;
};
int main()
{
doceira doce[5];
int i;
int soma=0;
for (i=0; i<5; i++)
{
printf("\nInforme o tipo do doce: ");
scanf("%c",&doce[i].tipo);
printf("Informe seu preço: ");
scanf("%f",&doce[i].preco);
printf("Informe a marca: ");
scanf("%c",&doce[i].marca);
printf("Informe se é dietetico: ");
scanf("%c",&doce[i].dietetico);
if (doce[i].dietetico == 'S')
{
soma=soma+1;
}
}
printf ("%d, Quantidade dieteticos: ",soma);
return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Para declarar a estrutura vocÊ tem que fazer 

Citação

struct doceira doce[5];

Isso porque você não usou o typedef.

 

Olha, vou te dar uma dica, mas não sei se é certo usar assim: 

Depois de cada scanf coloque um %*c para eliminar a tecla enter do buffer do teclado.

o asterisco na mascara de tipo faz com que a insersao seja ignorada, assim não fica sujeira no buffer do teclado.

printf("\nInforme o tipo do doce: ");
scanf("%c%*c",&doce[i].tipo);
printf("Informe seu preço: ");
scanf("%f%*c",&doce[i].preco);
printf("Informe a marca: ");
scanf("%c%*c",&doce[i].marca);
printf("Informe se é dietetico: ");
scanf("%c%*c",&doce[i].dietetico);

Assim você não precisa usar o fflush(stdin) que dizem que não é recomendado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@r1castro1

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

#define LEN 1 ///O tamanho em um macro
struct doceira
{
    char tipo;
    float preco;
    char marca;
    char dietetico;
};
int main( void )
{
    struct doceira doce[ LEN ] = { 0x0 }; ///Aqui add 'struct'
    int i;
    int soma = 0x0;
    for ( i = 0x0; i < LEN; i++)
        {
            printf( "\nInforme o tipo do doce: " );
            scanf( " %c",&doce[i].tipo);    ///Aqui coloquei espaços no strforms
            printf( "Informe seu preço: " );
            scanf( "%f",&doce[i].preco);
            printf( "Informe a marca: " );
            scanf( " %c",&doce[i].marca);
            printf( "Informe se é dietetico: " );
            scanf( " %c",&doce[i].dietetico );
            if (doce[i].dietetico == 'S' )
                {
                    soma = soma + 1;
                }
        }
    printf ( "%d, Quantidade dieteticos: ",soma );
    return 0;///Done!
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ola  r1castro1!

Na estrutura do seu codigo é esperado que se declare vetores, na struct  encontra-se apenas o nome da variável e, não contendo formação de vetores, exemplo:

Dentro da  caixa  do vetor  atribuimos o valor para ele, que no caso e MAX, difinito  da biblioteca  como  'define' exemplo:

#define MAX = 20

 

char tipo[MAX];

char marca[MAX];

float preco[MAX];

 

Nota-se que  existem alguns erros  na 'entrada'  quando queremos  scanear alguma  variável  (elementos de  entrada) do tipo char ou string, usamos   '%s' ,

 

Lembrando que   esse código é  somente  exemplo, falta  a lógica!

 

Segue a estrutura  do  código;

 

exemplo:

//Biblioteca

#include <stdio.h>
#include <stdlib.h>
#define MAX = 20

  
// nome de  tipos complexo Estrutura   
typedef struct Doceria{
  char tipo[MAX];
  char dietetico;
  char marca[MAX];
  float preco[MAX];
}Doceria;
  

//protiticos da funçoes  
int Entrada_dados();
int Exibir_daddos();  
  
//Programa principal   
int main(){
     Entrada_dados(); 
     Exibir_daddos();
  
}
  
//Entrada de dados
int Entrada_dados(){
    Doceria d;
     static int i;
     int op=0;
    
    while(op<5){
        printf("\nDigite o tipo de doce: ");
        scanf("\n%s",&d.tipo[i]);
        printf("\nDigite S para dietetico ou N para  nao diedetico: ");
        scanf("\n%s",&d.dietetico);
        printf("\nDigite a marca do doce: ");
        scanf("\n%s",&d.marca[i]);
        printf("\nDigite o preco do doce: ");
        scanf("\n%f",&d.preco[i]);
        op++;
     }            
}                 
                               
//Saida de dados
int Exibir_daddos(){
    Doceria d;
    int i;   
        printf("\nDoces dieteticos: ");
        printf("\tTipo \tMarca \tPreco ");
        printf("\t%s\t%s\t%f",d.tipo,d.marca,d.preco[i]);        
        system("pause");       
}                        
                 
                 
                 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 03/10/2016 às 10:51, naldoP disse:

Ola  r1castro1!

Na estrutura do seu codigo é esperado que se declare vetores, na struct  encontra-se apenas o nome da variável e, não contendo formação de vetores, exemplo:

Dentro da  caixa  do vetor  atribuimos o valor para ele, que no caso e MAX, difinito  da biblioteca  como  'define' exemplo:

#define MAX = 20

 

char tipo[MAX];

char marca[MAX];

float preco[MAX];

 

Nota-se que  existem alguns erros  na 'entrada'  quando queremos  scanear alguma  variável  (elementos de  entrada) do tipo char ou string, usamos   '%s' ,

 

Lembrando que   esse código é  somente  exemplo, falta  a lógica!

 

Segue a estrutura  do  código;

 


exemplo:

//Biblioteca

#include <stdio.h>
#include <stdlib.h>
#define MAX = 20

  
// nome de  tipos complexo Estrutura   
typedef struct Doceria{
  char tipo[MAX];
  char dietetico;
  char marca[MAX];
  float preco[MAX];
}Doceria;
  

//protiticos da funçoes  
int Entrada_dados();
int Exibir_daddos();  
  
//Programa principal   
int main(){
     Entrada_dados(); 
     Exibir_daddos();
  
}
  
//Entrada de dados
int Entrada_dados(){
    Doceria d;
     static int i;
     int op=0;
    
    while(op<5){
        printf("\nDigite o tipo de doce: ");
        scanf("\n%s",&d.tipo[i]);
        printf("\nDigite S para dietetico ou N para  nao diedetico: ");
        scanf("\n%s",&d.dietetico);
        printf("\nDigite a marca do doce: ");
        scanf("\n%s",&d.marca[i]);
        printf("\nDigite o preco do doce: ");
        scanf("\n%f",&d.preco[i]);
        op++;
     }            
}                 
                               
//Saida de dados
int Exibir_daddos(){
    Doceria d;
    int i;   
        printf("\nDoces dieteticos: ");
        printf("\tTipo \tMarca \tPreco ");
        printf("\t%s\t%s\t%f",d.tipo,d.marca,d.preco[i]);        
        system("pause");       
}                        
                 
                 
                 

 

Obrigado, foi bem esclarecedor, porém ainda esta dando problema ao executar o código, pois o o printf nao imprime os resutados.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@r1castro1

 

 na saida, onde  for vetor  do  tipo 'char' atribuímos  somente  o nome   do vetor     que no caso e      d.tipo,d.marca e  somente  atribuir o  colchetes  no vertor   do tipo  float,  seguindo  esse exemplo :

 

printf("\t%s\t%s\t%f",d.tipo,d.marca,d.preco);

system("pause");

 

Pois  efetuei  o texto aqui  e   exibiu normal ! Examina  os caracter  de entrada(%f, %s) para  ver se nao existe algum erro de  sintaxe

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...