Newsgroup: it.comp.lang.c
Titolo: stringhe con spazi

ciao a tutti ho un piccolo problema; vorrei richiedere all'utente che
utilizza il mio programma di prova una stringa e riscriverla subito dopo,
solo che quando l'utente in esecuzione scrive una stringa contenente
spazi, il programma riscrive solo i caratteri fino al primo spazio. come
faccio a salvare nella stringa anche gli spazi (e quindi ristampare tutta
la frase comprensiva degli spazi stessi)?
grazie anticipatamente,
				lorenzo

 ha scritto nel messaggio
news:oGpn8.24011$S52.8...@news2.tin.it...

Posta la parte incriminata del post :)
Maurizio

> Posta la parte incriminata del post :)
Volevo dire del codice :p

Lorenzo wrote:

Usa fgets() e non scanf().
-- 
Baci,
Mony

diciamo che devo memorizzare su un array (stringa) una frase contenente
degli spazi inserita dall'utente, ad esempio "ciao amico mio". se uso
scanf() mi memorizza solo "ciao" perche' agli spazi si interrompe.
fra poco provero' con fgets come ha consigliato Mony, tu che ne dici?
appena ho un po' di codice in caso te lo posto, pero' mi sembra di essere
stato abbastanza chiaro nel descriverti il mio problema ;). ciao,
lorenzo


stato abbastanza chiaro nel descriverti il mio problema ;). ciao,
Impara a quotare :)
La fgets() e' preferibile perche' esegue un controllo sulle dimensioni
del buffer e perche' legge finche' non si verifica una di queste 2
condizioni:
- il buffer e' pieno
- raggiungi una newline
Se non ti piace la fgets() puoi fare a mano con delle getchar(), ma
non usare la scanf()... ti e' solo d'impiccio nel tuo caso.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 usare la scanf()... ti e' solo d'impiccio nel tuo caso.
non e' che non mi piaccia, l'ho provata e funziona, ma la cosa che non
capisco e' che se inserita all'interno di un costrutto switch o
all'interno di alcuni if, non funziona... o meglio passa alle istruzioni
successive senza chiedere di immettere nulla durante l'esecuzione.
incollo un pezzetto x esempio:
[...]
else if(sel==3){
             printf("messaggio: ");
             fgets(msg,100,stdin);
             printf("frase: %s\n",msg);
[...]
questo e' l'output:
[...]
selezione: 3
messaggio: frase: 
[e qui il programma si ferma]
non so come mai, ma non richiede la stringa, passando alle istruzioni
successive. avete qualche idea? vi ringrazio per l'aiuto che mi avete
dato finora.
lorenzo


Aggiungendo solo la dichiarazione di msg come:
char msg [100];
(immagino che l'abbia fatto anche tu).
Il tutto mi funziona perfettamente.


 successive. avete qualche idea?
Stai mischiando  scanf/gets/getchar? A occhio direi che  c'e` un newline
nel buffer.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"It is more complicated than you think"
                -- The Eighth Networking Truth from RFC 1925

 ha scritto nel messaggio
news:oGpn8.24011$S52.8...@news2.tin.it...


 usa semplicemete gets()
La funzione gets() e` mantenuta dallo standard per questioni di sola 
compatibilita` con le versioni precedenti e non deve essere usata, in 
quanto non effettua alcun controllo sui limiti del buffer utilizzato per 
leggere la stringa. E` consigliato, dunque, l'uso di fgets(), anche per 
leggere dal flusso standard di input.
-- 
Baci,
Mony