Newsgroup: it.comp.lang.c
Titolo: Eliminare carattere da stringa (fget) e scanf

Salve, come posso eliminare l'ultimo carattere (che presumo sia \0 ) da una
stringa ottenuta con un fget, in modo che quando vado a stampare quella
variabile su un file con fprintf non mi manda di una riga a capo?
Inoltre volendo non utilizzare lo scanf e quindi adoperare "gets", come
posso leggere delle variabili di tipo intero? Sorge questo problema, poichè
se tento di utilizzare contemporaneamente scanf e gets, sorgono dei
problemi...
Grazie!


1)      text[ strlen(text) - 1 ] = 0;
2)     puoi usare  gets()  e poi  sscanf()  sulla stringa ottenuta con
gets()
Ciao
E.

 problemi...
??? gets() da parecchi problemi se la quantita' di testo immesso supera
la dimensione del buffer a disposizione, non solo con scanf().
Cosa ti e' capitato?
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 variabile su un file con fprintf non mi manda di una riga a capo?
L'ultimo carattere letto da fgets(), a meno di non riempire il buffer di
lettura, è '\n', non '\0'.  L'unico modo per eliminarlo è quello di
sostituirlo con '\0'.
(non l'ho compilato):
#include <stdio.h>
int main()
{
    char s[50];
    if (fgets(s, sizeof(s), stdin))
    {
       int i;
       for (i = 0; s[i]; i++) 
       {
           if (s[i] == '\n') s[i] = '\0';
       }
    }    
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 gets()
Mai usare gets(), nè qualsiasi derivato di scanf(), a meno di non sapere
*esattamente* che cosa si sta facendo.


 *esattamente* che cosa si sta facendo.
Anche qui era solo un modo per consentire l'uso conbinato di  gets()  e
scanf().
Pero' non sapevo che fosse sconsigliabile sscanf(),
sapevo solo di dover stare attento a  scanf().
Io in questi casi uso  fgets()  su stdin , ma poi uso  sscanf(),
perche' e' pericoloso ?
L'alternativa, se non sbaglio, e' fare tutto a mano, o no ?
Di solito faccio a mano solo quando devo spostare il puntatore,
per esempio dopo un numero o un nome.
Grazie
Ciao
E.

 perche' e' pericoloso ?
In questo caso non ci vedo un particolare pericolo, ma in generale le
*scanf() sono sconsigliabili perché non hanno controlli sulla lunghezza
del campo da memorizzare.


 ha scritto nel messaggio
news:brp34v$3cg$1...@news.newsland.it...


 d[i][(strlen(d[i])-1)] = '';
Questo codice fa un'assunzione errata e cioè che l'ultimo carattere
memorizzato da fgets() sia sempre '\n', cosa che può benissimo non essere
vera.  Il mio codice dovrebbe compilare tranquillamente, su che riga ti da
errore ? purtroppo qui in ufficio non ho un compilatore C con cui
verificare.  Dovrebbe essere banale correggere l'errore.


 ha scritto nel messaggio
news:brprlr$404$1...@news.newsland.it...


 del campo da memorizzare.
Capito !
Grazie
Ciao
E.

 ?
No.


 del campo da memorizzare.
Immagino che ti riferisca alla lettura di stringhe. Ma questo e' vero 
solo se leggi col convertitore %s senza specificare il campo max. Se 
invece ce lo aggiungi (
p.es
. %80s ) il controllo lo hai.
Giorgio

 invece ce lo aggiungi (
p.es
. %80s ) il controllo lo hai.
Molto meglio ricorrere a fgets() in tutti i casi.
