我试图用结构创建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中。
答案 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);