Ir ao conteúdo
  • Cadastre-se
Éverton Todoroki

C Programação em C-Fila e struct

Recommended Posts

Olá, sou iniciante em programação em c e no momento estou aprendendo sobre fila em C. Fiz um programa e tá dando erro. Se alguém puder me ajudar fico muito grato.

 

Tenho que:  Implementar um sistema que utilize uma fila para controlar a entrada e saída de ordens de produção (código,descrição da peça a produzir, quantidade a produzir). Utilizar uma struct para representar a ordem de produção. Deve ser possível inserir, retirar e listar as ordens da fila. A fila deve ser implementada sobre um vetor de 10 elementos .

 

Os erros que estão acusando é em void inserir e diz.

#include <stdio.h>
#include <stdlib.h>
#define TAMANHO 5

struct fila
{
    int numeroelementos;
    int inicio;
    float elementos[TAMANHO];
    char descricao[20];
    int quantidade;
};

typedef struct fila Fila;

Fila *criarFila()
{
    Fila *f= (Fila*) malloc(sizeof(Fila));
    f->numeroelementos = 0;
    f->inicio = 0;
    return f;
}

void inserir(Fila *f, float valor,char nam[20],int qtd)
{
    if(f->numeroelementos == TAMANHO)
    {
        printf("Fila cheia.\n");
        return;
    }
    int fim = (f->inicio + f->numeroelementos) % TAMANHO;
    f->elementos[fim] = valor;
    f->descricao[fim]= nam; 
  //aqui dá o erro de f->descricao[fim]= nam;
  //Warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    f->quantidade[fim]=qtd; 
  //aqui da o erro: subscripted value is neither array nor pointer nor vector
   
  f->numeroelementos++;
}

void retirar(Fila *f)
{
    float valor;
    if(f->numeroelementos == 0)
    {
        printf("fila vazia.\n");
        return;
    } //retira o elemento da fila
    valor =f->elementos[f->inicio];
    f->inicio = (f->inicio + 1) % TAMANHO;
    f->numeroelementos--;
    printf("Elemento retirado = %.0f\n",valor);
}

void destruirFila(Fila *f)
{
    free(f);
}

void mostrarFila(Fila *f)
{
    printf("Conteúdo da fila\n");
    int i;
    for(i = 0; i < f->numeroelementos; i++)
        printf("%0.f\n",f->elementos[(f->inicio + i) % TAMANHO]);
    printf("\n");
}

int main()
{
    Fila *fila=criarFila();
    int opcao = -1;
    float item;
    int qtd;
    char nome[20];

    while(opcao != 0)
    {
        system("cls");
        printf("Escolha a opção desejada: \n");
        printf("1. Enfilera\n");
        printf("2. Retira \n");
        printf("3. Mostra a fila\n");
        printf("0. Fim\n");
        scanf("%d", &opcao);

        switch (opcao)
        {
        case 1 : //insere
            printf("Digite o codigo: ");
            scanf("%f", &item);
            printf("Digite a descricao da peca: ");
            fflush(stdin);
            gets(nome);
            printf("Digite a quantidade de pecas: ");
            scanf("%d", &qtd);
            inserir(fila,item,nome,qtd);
            break;
        case 2 : //retira
            retirar(fila);
            break;
        case 3 : //mostra
            mostrarFila(fila);
            break;
        }//switch
        printf("\n");
        system("pause");
    }
    destruirFila(fila);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa usar o strcpy para copiar uma string (o = não funciona para strings). E você está utilizando quantidade como se fosse um vetor, mas é uma variável normal.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Olá, tudo certo!? Então ...

 

Eu entendi um pouco do enunciado assim, veja:

 

13 horas atrás, Éverton Todoroki disse:

Implementar um sistema que utilize uma fila para controlar a entrada e saída de ordens de produção (código,descrição da peça a produzir, quantidade a produzir). Utilizar uma struct para representar a ordem de produção. Deve ser possível inserir, retirar e listar as ordens da fila. A fila deve ser implementada sobre um vetor de 10 elementos .

 

  • Faça uma struct Ordem_Producao com os campos: codigo, descricao, peca e quantidade (a produzir);
/*	Struct Ordem_Producao com os campos: 
	codigo, descricao, peca e quantidade (a produzir);
*/
struct Ordem_Producao
{	unsigned int	ui_codigo;
 	unsigned char	us_descricao[ 164 ];
	unsigned int	ui_peca;
	unsigned int	ui_quantidade;
}
  • Depois implemente as operações: inserir, retirar e listar para o conjunto.
  • Cada conjunto é uma fila ou um vetor de no máximo 10 struct Ordem_Producao.

 

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

×