Ir para conteúdo
Samuelv

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.