Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - aiuto programma C
Forum - C/C++ - aiuto programma C

Avatar
gtedeski (Normal User)
Rookie


Messaggi: 21
Iscritto: 02/11/2008

Segnala al moderatore
Postato alle 10:45
Lunedì, 07/09/2009
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;
}

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 11:55
Lunedì, 07/09/2009
se vuoi guarada questo link http://www.pierotofy.it/pages/guide_tutorials/CPlusPlus/Is ... 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!

PM Quote
Avatar
gtedeski (Normal User)
Rookie


Messaggi: 21
Iscritto: 02/11/2008

Segnala al moderatore
Postato alle 12:58
Lunedì, 07/09/2009
purtroppo fa differenza...

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 13:27
Lunedì, 07/09/2009
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:

PM Quote
Avatar
gtedeski (Normal User)
Rookie


Messaggi: 21
Iscritto: 02/11/2008

Segnala al moderatore
Postato alle 13:29
Lunedì, 07/09/2009
nn mi è kiaro se devo riaprire il file o continuare prima del fclose!poi nn so proprio come fare x leggere carattere x carattere

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 15:11
Lunedì, 07/09/2009
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.

Codice sorgente - presumibilmente Plain Text

  1. 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:

PM Quote
Avatar
gtedeski (Normal User)
Rookie


Messaggi: 21
Iscritto: 02/11/2008

Segnala al moderatore
Postato alle 12:44
Martedì, 15/09/2009
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;
}

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 18:48
Martedì, 15/09/2009
basta che cerchi su google come si usa la funziona fgets ;) comunque basta che fai un cilclo del genere:
Codice sorgente - presumibilmente C/C++

  1. int contatore_a=0;
  2. char *linea;
  3. char buffer[200];
  4. linea=fgets(buffer, 200, cfPtr);
  5. while(linea!=NULL)
  6.    {
  7.     if(linea[0]=='a') contatore_a++;
  8.     linea=fgets(buffer, 200, cfPtr);
  9.     }


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

PM Quote