Newsgroup: it.comp.lang.c
Titolo: Lettura da file

Salve a tutti, avrei una domanda da fare:
Come leggere da un file una stringa che ha dentro uno spazio bianco?
Lo spazio bianco deve essere memorizzato nella stringa.
Possibilmente vorrei usare la fscanf.
P.S. Ho già provato ad usare qualcosa del tipo:
char stringa[30];
short int numero;
fscanf(req_file,"%[A-Za-z] %hd", stringa, &numero);
Ma non so perchè in  "stringa"  mi memorizza solo la prima stringa
Grazie, è importante

 wrote in message
384bffd4...@news.tiscalinet.it...


Marco
Grazie, ma mi sorge un dubbio.
Siccome uso molte volte fscanf, ed ftell, ho letto che usare funzioni
diverse puo' dare dei problemi riguardo la posizione del puntetore al
file, tu che ne dici?
grazie e ciao

 wrote in message
384c332...@news.tiscalinet.it...


caratteri letti o un newline?
Anch'io consiglio l'uso di fgets(), pero' c'e' da dire che un difetto
c'e', e cioe' il dover eseguire successivamente una sscanf() sulla
stringa letta, mentre con fscanf() viene fatto tutto in automatico.
Quando si e' sicuri che i dati da leggere rientrano bene nelle zone di
memoria assegnate, e' bene utilizzare la funzione fscanf().
In realta' il problema di Giacomo si risolve molto facilmente
utilizzando il formato adeguato, ovvero aggiungendo uno spazio tra le
parentesi quadre che contengono i caratteri ammessi nella lettura.
Un esempio e' il seguente :
#include <stdio.h>
main()
{
    char buff[100] ;
    fscanf( stdin, "%[A-Za-z ]", buff ) ;
    /*                      ^ qui c'e' lo spazio */
    puts( buff ) ;
}
--
Andrea Laforgia
andrea_...@bigfoot.com

fscanf, per il migliore controllo che si ha su quello che la funzione fa.
Attenzione, pero', al fatto che con fscanf() si fa tutto cio' che si
fa con fgets(), ma non e' vero il contrario.
In questo senso, il suo uso e' vantaggioso.
Piu' che altro, l'uso di fgets() porta a scrivere codice migliore, in
quanto questa funzione consente di stabilire un limite alla lettura,
che sia compatibile con la capienza della destinazione dell'input.
--
Andrea Laforgia
andrea_...@bigfoot.com


andrea_...@bigfoot.com
Perfetto, grazie, però avrei un'ultima domanda.
In questo modo (a proposito, lo spazio bianco va messo dopo la prima
parentesi quadra o prima della seconda?) quando la parola dopo lo
spazio bianco è terminata, termina anche la fscanf? Se io ho un file
del tipo:
prima parola
numero
.....
con il tuo codice in buff viene memorizzato solo "prima parola"?
Perchè è questo che mi serve.
Ciao e veramente tante grazie.
Giacomo

con il tuo codice in buff viene memorizzato solo "prima parola"?
Si', pero' attenzione : se hai
parolaA parolaB parolaC
numero
con la prima fscanf() legge "parolaA parolaB", mentre con la seconda
"parola C", non va a capo.
fscanf() si ferma quando incontra uno spazio bianco o il '\n'.
--
Andrea Laforgia
andrea_...@bigfoot.com

 fscanf() si ferma quando incontra uno spazio bianco o il '\n'.
A meno che tu non gli dica di accettare gli spazi bianchi.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

"parola C", non va a capo.
Chiedo scusa, non e' cosi'.
Con la fscanf viene letto "parolaA parolaB parolaC".
--
Andrea Laforgia
andrea_...@bigfoot.com