Nos dan casi dos archivos idénticos. Pero algunos personajes están dañados. Necesitamos encontrar el número de línea y su posición donde existen esas letras corruptas, así como el número total de letras corruptas (errores).
Ejemplos:
Input : file1.txt contains it is fun file2.txt contains it is run Output : Line Number : 2 Error Position : 1 Total Errors : 1
Requisito previo: getc() en C
Pasos:
1.> Abra dos archivos usando el puntero de archivo en modo de solo lectura.
2.> Obtenga datos del archivo en dos variables de caracteres uno por uno hasta el final del archivo.
3.> Si la variable encuentra una nueva línea, aumente el número de línea y restablezca la posición a cero.
4.> Si las variables no son iguales, aumente el número de error e imprima la línea de error, así como el índice de error.
// C program to compare two files and report // mismatches by displaying line number and // position of line. #include<stdio.h> #include<string.h> #include<stdlib.h> void compareFiles(FILE *fp1, FILE *fp2) { // fetching character of two file // in two variable ch1 and ch2 char ch1 = getc(fp1); char ch2 = getc(fp2); // error keeps track of number of errors // pos keeps track of position of errors // line keeps track of error line int error = 0, pos = 0, line = 1; // iterate loop till end of file while (ch1 != EOF && ch2 != EOF) { pos++; // if both variable encounters new // line then line variable is incremented // and pos variable is set to 0 if (ch1 == '\n' && ch2 == '\n') { line++; pos = 0; } // if fetched data is not equal then // error is incremented if (ch1 != ch2) { error++; printf("Line Number : %d \tError" " Position : %d \n", line, pos); } // fetching character until end of file ch1 = getc(fp1); ch2 = getc(fp2); } printf("Total Errors : %d\t", error); } // Driver code int main() { // opening both file in read only mode FILE *fp1 = fopen("file1.txt", "r"); FILE *fp2 = fopen("file2.txt", "r"); if (fp1 == NULL || fp2 == NULL) { printf("Error : Files not open"); exit(0); } compareFiles(fp1, fp2); // closing both file fclose(fp1); fclose(fp2); return 0; }
Producción:
Line Number : 2 Error Position : 1 Total Errors : 1
Este artículo es una contribución de Aditya Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA