Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的程序在我更改后崩溃了。从文件中读取_C_File_Crash_Linked List - Fatal编程技术网

C 我的程序在我更改后崩溃了。从文件中读取

C 我的程序在我更改后崩溃了。从文件中读取,c,file,crash,linked-list,C,File,Crash,Linked List,我正在做一个项目,当我试图使用一个文件来帮助我记录一个用户的注册号时 在我完成了创建文件的部分之后,每当我调用我更改的函数(Ler_Pessoa())时,我的程序就会开始崩溃。它没有报告任何错误或警告,我无法理解它为什么会这样 我有两个文件,一个工作正常,每次删除“Data.txt”文件时,我都需要在0中启动第二个文件 如果你能看一下我的代码,我将不胜感激 我的头文件: #define ARQ "Dados.txt" /*ARQUIVO COM OS DADOS*/ #define ARQ_RE

我正在做一个项目,当我试图使用一个文件来帮助我记录一个用户的注册号时

在我完成了创建文件的部分之后,每当我调用我更改的函数(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);
在编号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");


}

在发布的源代码中,调用fscanf()和fprintf()时不使用文件指针。改成

fscanf( reg, "%d", &num_reg );


可以是全部。

获取(p->Nome)可能会使程序崩溃—您几乎不应该使用该函数—但除此之外,我无法发现此代码中有任何错误。我想它可能在你代码的其他部分。这个程序甚至不应该编译。您在调用
fscanf
fprintf
@thejh时没有提供文件句柄。这不是因为gets(),它在我实现新文件之前就已经工作了。gets()的输入不会超过20characters@paddy我编辑并发布了头文件。文件句柄已在头文件的前面定义。您的
fscanf
调用仍然错误,请检查此参考页:您是对的,非常感谢!它起作用了
fprintf( reg, "%d", num_reg );