|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2007
Messaggi: 476
|
[C] Acquisizione dati da file
Buonasera,
ho un problema con il linguaggio di programmazione C. Devo creare un programma che riceve in input una sequenza di numeri interi che sono scritti su un file .txt. Per fare un esempio, il file contiene i seguenti numeri: 4 15 9 23 5 2 11 19 27 (notare lo spazio che li separa). Vorrei che questi numeri fossero presi dal programma e inseriti in una stringa. Allora ho scritto il seguente programma: Codice:
char stringa[100]; FILE *f; f=fopen ("nomefile.txt","r"); fscanf (f,"%s",stringa); Grazie. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
fgets legge la linea
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2007
Messaggi: 476
|
ehm...puoi essere un po' più chiaro?
come e dove devo usare la funzione fgets? Grazie |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Apr 2010
Messaggi: 163
|
Codice:
#include <stdio.h> int main() { char linea[100]; FILE *stream; stream = fopen("file.txt","r"); if(stream == NULL) printf("Impossibile aprire il file!"); else { fgets(linea,100,stream); printf("%s",linea); fclose(stream); } return 0; }
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
e poi puoi usare sscanf per leggere gli interi dalla stringa
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2007
Messaggi: 476
|
Ma non c'è un metodo più semplice?
Scusate se non accetto i vostri consigli, ma siccome ho un esame non so se mi lascino usare comandi come fgets che non abbiamo visto in classe. Ho sentito che se i numeri nel file .txt, invece di separarli l'uno dall'altro attraverso uno spazio, li scrivo uno per riga, la fscanf dovrebbe essere in grado di acquisirli. Io ho provato, ma non ci riesco. Me lo confermate anche voi? |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
dipende molto da cosa devi farci con questi numeri.. se non ti serve tenerli tutti in memoria (ad esempio devi usarli per calcolare una media, o fare qualche altro tipo di calcolo per il quale ti basta leggere un numero alla volta) puoi fare così:
(l'esempio è per calcolare la media) Codice:
double avg = 0; int n = 0; // Numero di numeri letti while (!feof(f)) { int x; fscanf(f, "%d", &x); avg += x; n++; } avg /= n; printf("La media è %f\n", avg); |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2007
Messaggi: 476
|
Forse l'esempio dei numeri è fuorviante...Supponiamo che il file contenga tre parole. Come faccio ad acquisirle tutte? Sempre con fgets?
Ti ringrazio per la tua disponibilità. Grazie davvero. Non so come farei senza il tuo aiuto. Ultima modifica di Bestseller : 06-12-2010 alle 15:40. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
puoi sempre usare fgets quando devi leggere un riga, dal momento che una volta che hai una stringa in cui hai la riga letta puoi farci un po' quello che vuoi, ad esempio dividere le parole con strtok o qualsiasi altro lavoro devi farci (leggere altri tipi di dato con sscanf ad esempio), senza avere necessità di sapere a priori quante parole devi leggere
certo, se sai che devi leggere esattamente 3 parole, puoi semplicemente fare una cosa del genere: Codice:
char buf[3][256]; int i = 0; for (i = 0; i < 3; i++) { fscanf("%s", buf[i]); } non c'è un modo giusto o un modo sbagliato |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:01.