0

私はプロジェクトを行っており、ファイルを使用してユーザーの登録番号を記録し続けるのに役立てようとしています。

ファイルを作成した後、変更した関数 (Ler_Pessoa()) を呼び出すたびにプログラムがクラッシュし始めます。エラーや警告は報告されず、なぜそのように動作するのか理解できませんでした。

2 つのファイルがあり、1 つは正しく機能しており、「Data.txt」ファイルを削除するたびに 2 番目のファイルを 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");


}
4

1 に答える 1

0

投稿されたソース コードでは、 fscanf() と fprintf() がファイル ポインターなしで呼び出されます。それをに変更する

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

fprintf( reg, "%d", num_reg );

すべてかもしれません。

于 2013-06-10T12:46:46.820 に答える