Ho iniziato a imparare C (tramite Youtube e K & R) qualche tempo fa e sto cercando di scrivere alcuni programmi come pratica. Attualmente voglio creare un programma che legge le parole da un file e ne confronta l'inizio con l'input dell'utente. Il programma confronta con successo la prima parola e mi dà un risultato, ma non riesco a ottenere il fseek() per spostarsi correttamente alla riga successiva! (Questa è la versione corrente della parte che cerca di parole.)Problemi con fseek() e lettura dal file
fp= fopen("final.txt", "r");
for (i=0; i<8; i++){
fseek(fp, fileCount, SEEK_CUR);
fgets(strFile, 20, fp);
fileCount= strlen(strFile);
printf("Strlen %d. is: %d\n", i+1, fileCount);
printf("String is %s", strFile);
compareStr(strUser, strFile);
};
fclose(fp);
FileCount è impostato su 0 e strlen() dovrebbe restituire la lunghezza della srtFile stringa, ma doesn' abbastanza bene. Ho anche provato a impostare fseek() manualmente, ma non si muoveva. Le parole del mio file sono: Primo, Ultimo, Indice, Campo, ID, Numero, Fuoco, Film. (ognuno è in una nuova riga). Quando eseguo il programma e digitare F (per la ricerca di una parola che ha un capitale f), l'output è:
Type in the letters: F
Strlen 1. is: 6
String is First
Match found: First
Strlen 2. is: 6
String is Index
Strlen 3. is: 1
String is
Strlen 4. is: 2
String is D
Strlen 5. is: 5
String is mber
Strlen 6. is: 1
String is
Strlen 7. is: 3
String is ilmStrlen 8. is: 3
String is ilm
Process returned 0 (0x0) execution time : 2.218 s
Press any key to continue.
sono disperata. Qualche idea/indizio?
[EDIT] Un grande ringraziamento a tutti coloro che mi hanno aiutato con questo!
Non vuoi aumentare 'fileCount'? Se sei in Windows, potresti voler aprire con "rb" a causa della convenzione CRLF. Se stai leggendo il file in sequenza, perché preoccuparti di 'fseek'? –
Il tuo filepointer è già alla parola successiva, fgets sposta il puntatore del file mentre legge, quindi il fseek è superfluo. – rhubarbdog
BTW 'fseek' potrebbe essere pericoloso per i file aperti in modalità testo; spiegato [qui] (http://arstechnica.com/civis/viewtopic.php?t=420490). Riepilogo: a causa della conversione '\ n' <->' \ r \ n', il parametro di 'fseek' dovrebbe essere 0 o provenire da una precedente chiamata' ftell'. Quindi dovresti usare sia 'fseek' che' ftell' nel tuo programma (o nessuno? Forse non hai bisogno di 'fseek' affatto?). – anatolyg