[英]C program crashes when a function is called.
所以,我向用戶詢問novo-> prato(列表項),但是在函數調用中的某處或者之前的scanf中,程序崩潰了,我看不出代碼有什么問題。
這些是聲明和功能。
typedef struct pedido pedido, *ppedido;
struct ingrediente{
char nome[15];
int id;
int qtd;
int limite;
int consumo_medio;
};
struct item{
char id[5];
int ing[10];
float qtd[10];
};
struct pedido{
char id[5];
int prioridade;
int mesa, n_pratos;
struct prato *prato[TAM];
ppedido prox;
};
struct prato{
char id[5];
};
int verifica_prato(char prato[])
{
FILE *f;
struct item aux;
int i=0, j=0;
f = fopen("menu.bin", "rb");
while((fread(&aux, sizeof(struct item), 1, f)) == 1){
if((strcmp(prato, aux.id)) == 0)
i++;
}
fclose(f);
if(i == 0){
printf("Prato nao existe no menu.\n");
return 1;
}
if(i > 1)
return 0;
}
這是函數ia調用的地方。
for(i=0;i<novo->n_pratos;i++){
do{
printf("Introduza o ID do prato %d: ", i+1);
scanf("%s", &novo->prato[i]);
printf("%s", novo->prato[i]);
k = verifica_prato(novo->prato[i]); //this function
if(k == 0)
w = verifica_ing(novo->prato[i]->id);
}while(k != 0);
}
里面的verifica_prato()
在行f = fopen("menu.bin", "rb")
你應該檢查文件是否成功打開。
使用if( f != NULL )
novo->n_pratos
總是小於TAM
? 如果n_pratos
超過TAM
,則可能存在邊界錯誤,因為已將TAM
定義為數組大小。
verifca_prato的簽名不應該是int verifica_prato(struct prato),或者調用應該是verifica_prato(novo-> prato [i] - > id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.