// // main.c // T4_Ej13 // // Created by Mari Paz Guerrero Lebrero on 5/5/15. // Copyright (c) 2015 Mari Paz Guerrero Lebrero. All rights reserved. // #include #include char* InicializarCadena(); int ContarLineas(FILE *f); int UltimasLineas(FILE *f1, FILE *f2, int n); int main() { FILE *fin, *fout; char *nom_in; int n, ok; printf("Introduzca el nombre del fichero de entrada: "); nom_in = InicializarCadena(); printf("Introduzca el numero de lineas a leer: "); scanf("%d", &n); fin = fopen(nom_in, "r"); if(fin != NULL) { fout = fopen("/Users/Lin/Desktop/salida.txt", "w"); if(fout != NULL) { ok = UltimasLineas(fin, fout, n); if(ok) printf("Copia realizada con exito\n"); else printf("ERROR: El numero de lineas excede del numero de lineas del fichero\n"); fclose(fin); fclose(fout); } else printf("Error en la apertura del fichero de salida\n"); } else printf("Error en la apertura del fichero de entrada\n"); return 0; } char* InicializarCadena() { int i = 0; char c, *s; s = (char*)malloc(sizeof(char)); while((c = getchar()) != '\n') { s[i] = c; i++; s = (char*)realloc(s, (i + 1)*sizeof(char)); } s[i] = '\0'; return s; } int ContarLineas(FILE *f) { int lineas = 0; while(!feof(f)) { if(fgetc(f) == '\n') lineas++; } return lineas; } int UltimasLineas(FILE *f1, FILE *f2, int n) { int lineas, cont_l = 0, aux, ok = 1; char c; lineas = ContarLineas(f1); if(lineas < n) ok = 0; rewind(f1); aux = lineas - n; while(!feof(f1)) { c = fgetc(f1); if(cont_l > aux && cont_l <= lineas) fputc(c, f2); if(c == '\n') cont_l++; } return ok; }