Ho visto molti post ma non ho trovato nulla di simile.
sto ottenendo uscita sbagliata:leggendo le ultime n righe dal file in c/C++
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...... // may be this is EOF character
Entrando nel ciclo infinito.
mio algoritmo:
- Vai alla fine del file.
- diminuire la posizione del puntatore di 1 e leggere il carattere con il carattere .
- uscita se abbiamo trovato le nostre 10 linee o raggiungiamo l'inizio del file.
- ora eseguirò la scansione del file completo fino a EOF e stamperò // non implementato nel codice. codice
:
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
FILE *f1=fopen("input.txt","r");
FILE *f2=fopen("output.txt","w");
int i,j,pos;
int count=0;
char ch;
int begin=ftell(f1);
// GO TO END OF FILE
fseek(f1,0,SEEK_END);
int end = ftell(f1);
pos=ftell(f1);
while(count<10)
{
pos=ftell(f1);
// FILE IS LESS THAN 10 LINES
if(pos<begin)
break;
ch=fgetc(f1);
if(ch=='\n')
count++;
fputc(ch,f2);
fseek(f1,pos-1,end);
}
return 0;
}
UPD 1:
cambiato codice: ha solo 1 errore ora - se l'ingresso ha linee come
3enil
2enil
1enil
it prints 10 lines only
line1
line2
line3ÿine1
line2
line3ÿine1
line2
line3ÿine1
line2
line3ÿine1
line2
PS:
1. lavorando su Windows nel blocco note ++
questo non è compito
anche io voglio farlo senza utilizzare alcun più memoria o l'uso di STL.
sto esercitando per migliorare la mia conoscenza di base quindi per favore non postare su eventuali funzioni (come la coda -5 tc.)
si prega di contribuire a migliorare il mio codice.
Suggerimento: 'progressi fgetc' il file indicatore di posizione per uno. – jsalonen
prova 'fseek (f1, pos-1, SEEK_SET);' e bin file. – BLUEPIXY
C o C++? Sceglierne uno. (Suggerimento: è principalmente C.) –