Estou escrevendo um código onde preciso ler dois arquivos: em um deles há apenas uma linha com 20 caracteres; no outro há muitas linhas, todas com 20 caracteres. Meu objetivo é comparar cada linha do segundo arquivo com a única linha do primeiro arquivo. O resultado da comparação será gravado em um terceiro arquivo onde para cada caractere que coincidir, eu atribuo o valor 1 e, para cada caractere que não coincidir, eu atribuo 0.
O que não consigo compreender é porque, apesar da função fgets está capturando todos os caracteres desejados dos arquivos, ela não está comparando o primeiro caractere do arquivo 1 com o primeiro caractere de cada linha do arquivo 2. (sei disso porque, antes do laço, se eu imprimo os caracteres lidos do arquivo 1, eu consigo visualizar todos que desejo. Porém, se imprimo os caracteres lidos do mesmo arquivo, dentro do laço, o código não imprime o primeiro caractere do arquivo 1). Abaixo, o código.
main(){
//Declara variáveis e solicita do usuário a entrada do gabarito oficial
char gabarito_oficial[21],gabarito_individual[21];
int i=0;
//abre o arquigo de gabaritos dos candidatos para leitura e cria e abre o arquivo onde irá escrever os gabaritos corrigidos
//também abre o arquivo com o gabarito oficial
FILE *fp1=fopen("gabaritos.txt","r");
if (fp1==NULL)
printf("não foi possível abrir o arquivo gabaritos.txt");
FILE *fp2=fopen("gabaritos_corrigidos.txt","w");
if (fp2==NULL)
printf("não foi possível criar o arquivo gabaritos_corrigidos.txt");
FILE *fp3=fopen("gabarito_oficial.txt","r");
if (fp3==NULL)
printf("não foi possível abrir o arquivo gabaritos.txt");
//laço para ler o gabarito de cada candidato individualmente e comparar item a item com o gabarito oficial que está na variável
//gabarito_oficial
fgets(gabarito_oficial,22,fp3);
while (fgets(gabarito_individual,22,fp1)!=NULL){
while (i<20){
if(gabarito_individual==gabarito_oficial)
fputc(49,fp2);
else
fputc(48,fp2);
i=i+1;
}
i=0;
fputc(10,fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
Pergunta
marcelonunes06
Estou escrevendo um código onde preciso ler dois arquivos: em um deles há apenas uma linha com 20 caracteres; no outro há muitas linhas, todas com 20 caracteres. Meu objetivo é comparar cada linha do segundo arquivo com a única linha do primeiro arquivo. O resultado da comparação será gravado em um terceiro arquivo onde para cada caractere que coincidir, eu atribuo o valor 1 e, para cada caractere que não coincidir, eu atribuo 0.
O que não consigo compreender é porque, apesar da função fgets está capturando todos os caracteres desejados dos arquivos, ela não está comparando o primeiro caractere do arquivo 1 com o primeiro caractere de cada linha do arquivo 2. (sei disso porque, antes do laço, se eu imprimo os caracteres lidos do arquivo 1, eu consigo visualizar todos que desejo. Porém, se imprimo os caracteres lidos do mesmo arquivo, dentro do laço, o código não imprime o primeiro caractere do arquivo 1). Abaixo, o código.
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
main(){
//Declara variáveis e solicita do usuário a entrada do gabarito oficial
char gabarito_oficial[21],gabarito_individual[21];
int i=0;
//abre o arquigo de gabaritos dos candidatos para leitura e cria e abre o arquivo onde irá escrever os gabaritos corrigidos
//também abre o arquivo com o gabarito oficial
FILE *fp1=fopen("gabaritos.txt","r");
if (fp1==NULL)
printf("não foi possível abrir o arquivo gabaritos.txt");
FILE *fp2=fopen("gabaritos_corrigidos.txt","w");
if (fp2==NULL)
printf("não foi possível criar o arquivo gabaritos_corrigidos.txt");
FILE *fp3=fopen("gabarito_oficial.txt","r");
if (fp3==NULL)
printf("não foi possível abrir o arquivo gabaritos.txt");
//laço para ler o gabarito de cada candidato individualmente e comparar item a item com o gabarito oficial que está na variável
//gabarito_oficial
fgets(gabarito_oficial,22,fp3);
while (fgets(gabarito_individual,22,fp1)!=NULL){
while (i<20){
if(gabarito_individual==gabarito_oficial)
fputc(49,fp2);
else
fputc(48,fp2);
i=i+1;
}
i=0;
fputc(10,fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.