Oppure

Loading
07/09/09 8:45
gtedeski
ciao a tutti...sto svolgendo questo esercizio:
1)leggere da tastiera un testo e scriverlo su file
2)visualizzare il contenuto del file carattere per carattere
3)contare il numero di linee del file che iniziano con la lettera 'a'
Io ho svolto la prima parte ke metto sotto...potete aiutarmi a fare gli altri due punti??grazie.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main ()
{
char valore[100];
int i;
FILE *cfPtr;
cfPtr = fopen("prova10-02-09.txt", "w";);
printf ("Inserisci testo: \n";);
while (strcmp (valore, "ok";) != 0)
{
scanf ("%s", &valore);
if (strcmp (valore, "ok";) != 0)
fprintf (cfPtr,"%s ",valore);
}
fclose (cfPtr);

system ("pause";);
return 0;
}
aaa
07/09/09 9:55
giuseppe93
se vuoi guarada questo link pierotofy.it/pages/guide_tutorials/CPlusPlus/Istruzione_sui_FILE/ che spiega chiaramente le funzione per fare ciò che ti serve. L'unico problema è che si tratta di C++ e non C... Ma se per te non fa differenza allora trovi quello che ti serve!
aaa
07/09/09 10:58
gtedeski
purtroppo fa differenza...
aaa
07/09/09 11:27
ingMark
hai fatto il primo punto :)
cosa non ti è chiaro degli altri due?
non sai come leggere da file? non sai come contare le linee che iniziano con a?
Esprimi nello specifico il problema perchè altrimenti sembra che vuoi farti fare il resto del programma :k:

cmq per leggere da file c'è la fscanf() che funziona esattamente come la scanf e chiede gli stessi parametri della fprintf (ovviamente dovrai aprire il file in lettura.

Per quanto riguarda le a invece devi chiederti quando inizia una riga.
Una nuova righa inizia dopo il carattere '\n'.
Quindi il consiglio che ti do è leggi carattere per carattere e ogni volta che incontri il '\n' controlla se il carattere dopo è una a :k:
aaa
07/09/09 11:29
gtedeski
nn mi è kiaro se devo riaprire il file o continuare prima del fclose!poi nn so proprio come fare x leggere carattere x carattere
aaa
07/09/09 13:11
ingMark
il file lo devi riaprire un'altra volta :)
infatti mentre nel tuo programma lo hai aperto in scrittura ("w";) ora dovrai aprirlo in lettura ("r";).
Per leggere carattere per carattere puoi usare tranquillamente la fscanf().
Ho visto che hai usato sia la scanf che la fprintf nel tuo programma quindi non dovresti avere problemi.

fscanf(punt_a_file, "%c", &dove_vuoi);


La fscanf restituisce EOF quando finisce il file :)
Ti consiglio cmq di ripassarti o studiarti bene i file, in un qualunque libro ci sono scritte queste cose, spiegate molto meglio di quanto ti abbia fatto io :k:
aaa
15/09/09 10:44
gtedeski
ho svolto i primi 2 punti (los volgimento lo metto sotto) ma nn so come usare la funzione fgets nel 3 punto...potreste aiutarmi x favore?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main ()
{
char valore[100];
int i;
char c;
//leggo da tastiera e scrivo sul file
FILE *cfPtr;
cfPtr = fopen("prova10-02-09.txt", "w";);
printf ("Inserisci testo: \n";);
while (strcmp (valore, "ok";) != 0)
{
scanf ("%s", &valore);
if (strcmp (valore, "ok";) != 0)
fprintf (cfPtr,"%s ",valore);
}
fclose (cfPtr);
//finisco di leggere e scrivere

//visualizzo il contenuto carattere per carattere
cfPtr = fopen("prova10-02-09.txt", "r";);
while (!feof(cfPtr))
{
fscanf (cfPtr,"%c", &c);
printf ("%c", c);
}
fclose (cfPtr);
//finisco di visualizzare




system ("pause";);
return 0;
}
aaa
15/09/09 16:48
giuseppe93
basta che cerchi su google come si usa la funziona fgets ;) comunque basta che fai un cilclo del genere:
int contatore_a=0;
char *linea;
char buffer[200];
linea=fgets(buffer, 200, cfPtr);
while(linea!=NULL) 
   {
    if(linea[0]=='a') contatore_a++;
    linea=fgets(buffer, 200, cfPtr);
    }

la funziona fgets ha tre parametri il primo (buffer) è la stringa doce viene salvata la linea letta, il secondo (200) è il massimo numero di caratteri che può contenere la stringa buffer e il terzo parametro e il file da leggere. Se la funziona torna NULL allora il file non contiene + linee cioè e stato finito di leggere
aaa