Ir ao conteúdo
  • Cadastre-se

struct


apolimarkus

Posts recomendados

Olá, bom dia! Fiz um programa utilizando a função struct, simulando um cadastro de produtos. No mesmo utilizei um vetor para que seja cadastrado mais de um produto, mas o programa está apresentando um erro ao compilar, na seguinte linha: printf("Codigo...........:%d\n",vetor.codigo);. Peço que alguem analise-o e possa corrigir eventual erro que está apresentando. até mais!

#include<stdio.h>

#include<stdlib.h>

struct produto{

int codigo;

char nome[50];

int quantidade;

float valor_compra;

float valor_venda;

};

int main(){

struct produto vetor[3];

for(int i=0; i<3; i++){

printf("Nome.................: ");

fgets(vetor.nome,50,stdin);

printf("Codigo...............: ");

scanf("%d", &vetor.codigo);

printf("Quantidade...........: ");

scanf("%d", &vetor.quantidade);

printf("Valor de compra......: ");

scanf("%f", &vetor.valor_compra);

printf("Valor de venda.......: ");

scanf("%f", &vetor.valor_venda);

printf("\n\n");

}

printf("Exibindo os dados:\n");

printf("Codigo...........:%d\n",vetor.codigo);

printf("Item.............:%s\n",vetor.nome);

printf("Quantidade.......:%d\n",vetor.quantidade);

printf("Valor de compra..:%.2f\n",vetor.valor_compra);

printf("Valor de venda...:%.2f\n",vetor.valor_venda);

system("pause");

}

Link para o comentário
Compartilhar em outros sites

Acredito que o problema é porque você usou esse comando fgets(vetor.nome,50,stdin); e depois scanf("%d", &vetor.codigo);

Sempre que usar um comando que captura caracter e depois outro que captura numeros, tem que usar a função "fflush(stdin)" para limpar buffer do teclado.

for(int i=0; i<3; i++){

printf("Nome.................: ");

fgets(vetor.nome,50,stdin);

fflush(stdin);

printf("Codigo...............: ");

scanf("%d", &vetor.codigo);

printf("Quantidade...........: ");

scanf("%d", &vetor.quantidade);

printf("Valor de compra......: ");

scanf("%f", &vetor.valor_compra);

printf("Valor de venda.......: ");

scanf("%f", &vetor.valor_venda);

fflush(stdin);

printf("\n\n");

}

Link para o comentário
Compartilhar em outros sites

O erro que apresenta ao ser compilado não está no comando: scanf("%d", &vetor.codigo); e sim está ao imprimir na tela o resultado final do programa, ou seja,no comando printf("Codigo...........:%d\n",vetor.codigo); apresentando o seguinte enunciado de erro: "name lookup of 'i' changed for new ISO 'for' scoping"

Link para o comentário
Compartilhar em outros sites

Valeu pela dica, estava declarando no lugar errado a variavel "i", acreditava que o contador "i", poderia ser declarado dentro do "for", sem nenhum problema, pois já vi muitos programas sendo feitos declarando o "i" dentro do "for". Mas ocorreu um problema no momento de executar o programa, ao invés de imprimir na tela os três produtos listados pelo usuário, por ter incluido um vetor de 3 posições, aparece somente a impressão de um, e de uma forma estranha, apresentando dados demais e simbolos. Qual seria o erro desta vez, não consigo encontrá-lo?

Link para o comentário
Compartilhar em outros sites

A declaração do contador dentro do for vale para java e C++ que eu saiba, possivelmente C# também, em C não, variável só pode ser declarada no começo de bloco antes de qualquer outro comando.

Indo ao seu problema, o seu 'for' só percorre o vetor para colocar os valores, quando sai do bloco 'for' a variável i mantém o valor usado quando saiu do bloco, ou seja 3. Acontece que o seu vetor não tem uma posição 3 assim quando você manda imprimir os conteúdos de 'vetor' você faz 'vetor[3]' que está fora dos limites e então o seu programa imprime o que está nessa posição da memória, em outras palavras lixo que provavelmente não faz sentido.

C não faz bound-checking para vetor logo sempre tome cuidado ao usar vetores. Para o seu caso se você quiser imprimir todos os vetores é só fazer um novo 'for' com a parte da impressão da struct.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!