Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

×

Informação importante

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