Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-12-2010, 18:28   #1
Bestseller
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);
Il problema è che, così facendo, il programma mi prende soltanto il primo numero perchè a quanto pare lo spazio che separa i numeri funge da terminatore. Come posso fare ad acquisire tutti i numeri?
Grazie.
Bestseller è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2010, 19:44   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
fgets legge la linea
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2010, 20:36   #3
Bestseller
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 476
ehm...puoi essere un po' più chiaro?

come e dove devo usare la funzione fgets?
Grazie
Bestseller è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2010, 21:11   #4
alemoppo
Member
 
L'Avatar di alemoppo
 
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;
}
Ciao!
__________________
MSI B550-A PRO|Ryzen™ 5 3600|Freezer 13 PRO|RX 6600|CORSAIR CX600|Crucial P3 Plus 1TB|BL2K8G32C16U4B 3200 MHz|Q27G2G4
alemoppo è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2010, 22:06   #5
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
e poi puoi usare sscanf per leggere gli interi dalla stringa
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2010, 14:58   #6
Bestseller
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?
Bestseller è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2010, 15:25   #7
tuccio`
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);
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2010, 15:36   #8
Bestseller
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.
Bestseller è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2010, 16:21   #9
tuccio`
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]);
}
e hai le tre parole già divise in buf[1], buf[2] e buf[3]

non c'è un modo giusto o un modo sbagliato
tuccio` è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Arianespace lancerà altri satelli...
Eutelsat ha annunciato di aver affidato ...
PLD Space ha annunciato il nuovo razzo s...
CMF Clip Pro, tanta autonomia e design u...
Tre leggende del rally sbarcano in Asset...
iPhone 18 Pro Max, il chip A20 Pro mostr...
Samsung porterà il Privacy Displa...
WINDTRE BUSINESS trasforma la rete mobil...
Anthropic ammette un quarto caso di acce...
Mazda CX-6e, il primo test drive: quando...
La serie HONOR Magic 9 arriva a fine set...
Anker MagGo Power Bank 2 Pro arriva in I...
iRobot rilancia con Roomba Duo, il proto...
#linux su IRC è tornato dopo anni di sil...
Tesla lavora a stazioni Supercharger esc...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v