如何将STRUCT与FIFO结合使用

如何将STRUCT与FIFO结合使用,c,data-structures,struct,fifo,C,Data Structures,Struct,Fifo,我正在学习C语言中的“FIFO”这是我第一个尝试通过参数将结构传递给FIFO函数的代码,但它没有按预期工作。。。我不知道为什么。有人能帮我解释一下我做错了什么吗 我用葡萄牙语写的代码,如果你们很难理解,请告诉我我会翻译成英语 #define TAMANHO 3 #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct { char Nome[20]; } p

我正在学习C语言中的“FIFO”这是我第一个尝试通过参数将结构传递给FIFO函数的代码,但它没有按预期工作。。。我不知道为什么。有人能帮我解释一下我做错了什么吗

我用葡萄牙语写的代码,如果你们很难理解,请告诉我我会翻译成英语

#define TAMANHO 3

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


typedef struct
{
    char Nome[20];
} pretendentes; 



pretendentes // nome da estrutura
pessoas[10]; // vetor de estrutura



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


    cadastroPretendentes(pessoas);
    qstore(pessoas);
}

void qstore(pretendentes *Pessoas)
{
    int pfinal   = 0;
    int pinicial = 0;

    if(pinicial == TAMANHO)
    {
        printf("A fila está cheia.");
        return;
    }

    pessoas[pinicial] = Pessoas.Nome;
    pinicial++;
}

void cadastroPretendentes(pretendentes *Pessoas)
{
    int i;

    for(i = 0; i < TAMANHO; i++)
    {
        printf("Insira o nome do pretendente %d: ", i+1);
        scanf("%s", (*(Pessoas + i)).nome);
    }
}
#定义TAMANHO 3
#包括
#包括
#包括
类型定义结构
{
charnome[20];
}假装;
假装//nome da estrutura
比索阿斯[10];//埃斯特鲁图拉酒店
内部主(空)
{
setlocale(LC_ALL,“”);
地籍(比索阿斯);
qstore(pessoas);
}
无效qstore(假装是*比索)
{
int-pfinal=0;
int pinicial=0;
if(pinicial==TAMANHO)
{
printf(“A fila estáchea.”);
返回;
}
pessoas[pinicial]=pessoas.Nome;
pinicial++;
}
无效地籍登记(登记*比索)
{
int i;
对于(i=0;i
假设PESSOA是fifo内存

在cadastroentes()中,您获取名称并将其存储到fifo内存中;在qstore()中,您使用pessoas[0]写入pessoas[0]

如果qstore被再次调用2次,数组中的第一个和第二个元素将替换为pessoas[0]


在这段代码中,qstore不是必需的,因为cadastroinvokentes()获取名称并存储在pessoas(fifo内存)

这段代码有许多问题,包括
Possoas
pessoas
是不同的标识符。您的FIFO实现可能也不是您想要的;你是在找循环缓冲区吗?可以通过将索引与数组大小进行模运算得到。如果FIFO是一个结构数组,则需要使用
memcpy()
将每个结构复制到其中。您可能希望确保使用的是您想要使用的数据结构。请注意,pessoas是全局的,因此您不需要在主函数中将其作为参数传递!另外,请注意pinicial是一个局部变量,每次从qstore返回时都会丢失它的值。结果是大量警告和一些错误消息。编译时,始终启用警告,然后修复这些警告。(对于
gcc
,至少使用:
-Wall-Wextra-Wconversion-pedantic-std=gnu11
)@user3629249我建议使用-std=C99或其他一些C标准,否则可能会失去可移植性。