我必须创建一个读取两个文件并进行比较的程序。但我陷入了这个部分:我将文件指针发送到一个函数,该函数从键盘收集文件的名称并打开它们。它发生成功,然后毁了它!
在某个地方读取第二个文件的名称或之后出现错误。我试图从打开它的函数中的文件2中打印出一些东西并且它有效。出现两个不同的问题:分段错误或没有任何反应,终端的光标一直闪烁,我需要ctrl+c
停止运行。
这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#define TAM_PALAVRA 46 // Maior palavra do português possui 46 letras
#define TAM_ARQUIVO 50
/* *** Funções *** */
void apresentacao();
int abrirArquivos(FILE *arquivo1, FILE *arquivo2);
void fecharArquivos(FILE *arquivo1, FILE *arquivo2);
/* *** main *** */
/* Corpo do programa */
int main() {
/* Variáveis */
FILE *arquivo1;
FILE *arquivo2;
int flag = 0; // Variável de controle - 1 para arquivos inexistentes e 0 para arquivos abertos com sucesso
/* Função para que o programa aceite caracteres da língua portuguesa */
setlocale(LC_ALL, "Portuguese");
/* Looping para garantir a correta abertura do programa */
do {
apresentacao();
if(flag == 1) {
printf("\tO ARQUIVO DIGITADO NÃO EXISTE. TENTE NOVAMENTE.\n\n");
}
flag = abrirArquivos(arquivo1, arquivo2); // Abrindo os arquivos necessários
} while(flag);
/* Liberando a memória */
fecharArquivos(arquivo1, arquivo2);
return 0;
}
/* *** apresentacao *** */
/* Explica para o usuário o que o programa faz */
void apresentacao() {
system("clear");
printf("\n\n\tProjeto 02 - Estruturas de Dados - Turma C");
printf("\n\tUnB - Universidade de Brasília");
printf("\n\tAluno: Sérgio de Castilho Mafra");
printf("\n\tMatrícula: 08/40769");
printf("\n\n\tCOMPARADOR DE TEXTOS");
printf("\n\n\t\tEste programa comparará dois textos fornecidos por você, usuário,\n\te imprimirá na tela um valor que representa quão parecidos os textos são.\n\tAcima de 50%%, os textos serão considerados plágio.\n\n");
}
/* *** abrirArquivos *** */
/* Coleta do usuário os nomes dos arquivos e os abre */
int abrirArquivos(FILE *arquivo1, FILE *arquivo2) {
char arq1[TAM_ARQUIVO+1], arq2[TAM_ARQUIVO+1];
/* Coletando o nome dos arquivos e verificando a existência dos mesmos */
// Arquivo 1
printf("\tDigite o nome do primeiro arquivo: ");
fgets(arq1, TAM_ARQUIVO, stdin);
arq1[strlen(arq1)-1] = '\0';
if((arquivo1 = fopen(arq1, "r")) == NULL) {
return 1;
}
// Arquivo 2
printf("\tAgora, digite o nome do segundo: ");
fgets(arq2, TAM_ARQUIVO, stdin);
arq2[strlen(arq2)-1] = '\0';
if((arquivo2 = fopen(arq2, "r")) == NULL) {
return 1;
}
char w[200];
printf("\n\n\t\t%s\n\n", fgets(w, 199, arquivo2));
// Flag 0, se os arquivos forem abertos com sucesso
return 0;
}
void fecharArquivos(FILE *arquivo1, FILE *arquivo2) {
fclose(arquivo1);
fclose(arquivo2);
}