Беда с ФИФО - PullRequest
       10

Беда с ФИФО

0 голосов
/ 29 апреля 2018

Я пытаюсь создать FIFO с помощью struct, но она не работает, я пытаюсь выяснить, что не так с моим кодом со вчерашнего вечера. Это всего лишь прототип, и пока все, что делает мой код, это хранить информацию. Видимо, он не делает даже этого.

 #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 голосов
/ 29 апреля 2018

Вот что я нашел:

// (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);
...