【发布时间】:2013-06-10 01:44:56
【问题描述】:
我正在做一个项目,当我尝试使用一个文件来帮助我不断记录一个用户的注册号。
在我完成创建文件的部分后,每次调用我更改的函数 (Ler_Pessoa()) 时,我的程序都会开始崩溃。它没有报告任何错误或警告,我无法理解它为什么会这样。
我有两个文件,一个工作正常,每次删除“Data.txt”文件时,我都需要第二个从 0 开始。
如果您能看一下我的代码,我将不胜感激。
我的头文件:
#define ARQ "Dados.txt" /*ARQUIVO COM OS DADOS*/
#define ARQ_REG "Registo.txt" /*Arquivo que vai contabilizando o numero do registo */
FILE *fp;
FILE *reg;
typedef struct
{
char Nome[100];
int Sala;
int Hora_inicio;
int Minuto_inicio;
int Hora_fim;
int Minuto_fim;
long int numero_registo;
char Status; /* '*' Indica que o registo está apagado */
} PESSOA;
void Numero_Registo();
void Listar_Reservas();
void Apagar_Pessoa();
void Alterar_Pessoa();
void Inserir_Pessoa();
void Pesquisar_Nome(char *s);
void Iniciar();
void Ler_Pessoa(PESSOA *p);
void Mostrar_Pessoa(PESSOA p);
void Adicionar_Pessoa(PESSOA p);
void Mensagem(char *msg);
在 Numero_Registo.c 中:
#include "header.h"
void Numero_Registo() /*
* Verifica se o Arquivo REG já existe. Se não existir, o numero de registo começa a 0.
* Se já existir, abre-o em Modo de Leitura e Escrita (r+b)
*/
{
int i = 0;
reg = fopen(ARQ_REG, "r+b"); /* Tenta Abrir*/
if (reg==NULL)
{
reg=fopen(ARQ_REG, "w+b");
fprintf("%d",i) ;/*Cria o Arquivo*/
}
fclose(reg);
}
在 Ler_Pessoa.c 中:
#include "header.h"
void Ler_Pessoa(PESSOA *p) /*Esta função permite ler os dados inseridos por um utilizador de modo a fazer a reserva*/
{
int num_reg;
reg = fopen (ARQ_REG,"r");
fscanf("%d", &num_reg);
num_reg++;
fclose(reg);
reg = fopen(ARQ_REG,"w");
fprintf ("%d", num_reg);
fclose(reg);
printf("Introduza o seu Nome (Primeiro e Ultimo) : "); gets(p->Nome);
printf("Introduza o numero da sala que quer reservar: "); scanf("%d", &p->Sala);
printf("Introduza a partir de que horas quer reservar a sala (HH:MM): "); scanf("%2d:%2d",&p->Hora_inicio , &p->Minuto_inicio);
printf("Introduza ate que horas quer reservar a sala (HH:MM): "); scanf("%2d:%2d", &p->Hora_fim , &p->Minuto_fim);
p -> Status = ' ';
p -> numero_registo = num_reg;
fflush(stdin);
system("cls");
}
【问题讨论】:
-
gets(p->Nome);如果输入太长,可能会导致程序崩溃——你几乎不应该使用该函数——但除此之外,我无法在这段代码中发现任何错误。我认为它可能在您代码的其他部分。 -
这个程序甚至不应该编译。您没有在对
fscanf和fprintf的调用中提供文件句柄。 -
@thejh 这不是因为gets(),它在我实现新文件之前就已经工作了。我的 gets() 输入不会超过 20 个字符
-
@paddy 我编辑并发布了头文件。文件句柄之前在头文件中定义。
-
您的
fscanf呼叫仍然错误,请查看此参考页面:cplusplus.com/reference/cstdio/fscanf
标签: c file crash linked-list