FIFO问题

时间:2018-04-29 12:49:23

标签: c struct fifo

我试图用结构创建FIFO,但它不起作用,我试图找出自昨天晚上以来我的代码出了什么问题。它只是原型,到目前为止,我的代码所做的一切都是商店信息。显然它甚至没有做到。

 #define TAM 10

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <locale.h>


        typedef struct
        {

            int final;
            int inicio;
            int tamanho;   
            int contador;

            char *vetorFila[TAM];

        }  pretendentes;


        void entrarComDadosLista();
        void armazenarDadosLista();


        int main(void)
        {
            setlocale(LC_ALL, "");        


            int i;
            for (i = 0; i < TAM; i++)
            {
                pretendentes -> vetorFila[i] = NULL;
            }


            entrarComDadosLista();


            return 0;
        }



        void entrarComDadosLista()
        {
            static char nomes[10], *ptr;

            printf("Digite o nome ou aperte ENTER para sair.\n\n");
            do
            {
                printf("Digite o nome do pretendente: ");
                scanf("%s", nomes);

                ptr = (char*) malloc(strlen(nomes));
                strcpy(ptr,       nomes);
                armazenarDadosLista(ptr);       

            } while(*nomes);
        }



        void armazenarDadosLista(pretendentes *Pretendente, char *nomes)
        {
            if(Pretendente -> inicio == TAM)
            {
                printf("A fila está cheia.");
                return 0;
            }

            Pretendente -> vetorFila[Pretendente->inicio] = nomes;
            Pretendente -> inicio++;

        }

有人可以帮我找到我的错误吗?代码确实编译但在几个条目后停止工作。我只想检查这些名字是否存储在fifo中。

1 个答案:

答案 0 :(得分:0)

这是我发现的:

// (1) declare "armazenarDadosLista" as a function accepting
//     an unknown number of arguments that each have an unknown type
void armazenarDadosLista();
...
// (2) in "entrarComDadosLista", call "armazenarDadosLista" with
//     1 argument: ptr
armazenarDadosLista(ptr);
...
// (3) declare "armazenarDadosLista" as a function accepting
//     2 arguments: pretendentes* , char*
void armazenarDadosLista(pretendentes *Pretendente, char *nomes) {
}

如果您将(1)更改为匹配(3),编译器会抱怨,因为您使用不正确数量的参数调用armazenarDadosLista。不要将void function_name();用于所有函数,而是使用正确数量和类型的参数声明它们,因此编译器可以在您执行armazenarDadosLista(ptr)之类的操作时帮助您:

void entrarComDadosLista(void);
void armazenarDadosLista(pretendentes *Pretendente, char *nomes);