Ir ao conteúdo
  • Cadastre-se
r1castro1

Struct - problema ao compilar (printf,scanf)

Recommended Posts

: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;
}

 

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, eu imaginei que a intenção dele era usar um caracter para cada entrada rsrsrs

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×