|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
[C] fgets
Allora ho questo problema:
per inserire la linea di parole compreso lo spazio ho usato fgets come suggerito, il mio problema è nell'inserimento, sembra che non si fermi a chiedermi cosa inserire e passi subito alla domanda successiva... perche???? Codice:
printf("Inserisci l'oggetto dell'appuntamento\n"); //scanf ("%s",&dati_appunti[xx].oggetto); strcat(testo,dati_appunti[xx].oggetto); strcat(testo,";"); system("cls"); printf("Inserisci descrizione appuntamento\n"); fgets(boh,250,stdin); //scanf ("%s",&dati_appunti[xx].appunto); strcat(testo,dati_appunti[xx].appunto); strcat(testo,";"); system("cls"); printf("Inserisci giorno/mese appuntamento\n"); scanf("%s",&phrase); |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
che rimanga nel buffer qualcosa?
![]() prova fare un fflush (stdin); ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#4 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16209
|
Quote:
Per rimuovere i caratteri di troppo dallo standard input, si può fare così: Codice:
while (getchar() != '\n') ;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
Quote:
na io voglio gli spazi ^^ |
|
![]() |
![]() |
![]() |
#6 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16209
|
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
Quote:
sono cofuso ![]() io voglio solo inserire una descrizione in una variabile :S |
|
![]() |
![]() |
![]() |
#8 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16209
|
Quote:
Quando chiami fgets, questi caratteri vengono letti dalla funzione uno alla volta e inseriti nella stringa, finché non si arriva alla lunghezza del buffer meno 1, oppure al newline. Se è successa la prima cosa, ad esempio perché hai chiamato fgets(line,20,stdin) e poi hai scritto "Trentatre trentini entrarono a Trento"), alcuni caratteri (nel caso in esempio, quelli della stringa "entrarono a Trento\n") sono rimasti nello standard input, e verranno utilizzati subito dalla successiva chiamata a scanf, fgets o quel che è. Per questo motivo, devi ripulire lo standard input prima della chiamata successiva. A proposito: adesso che ci penso, il codice che avevo postato prima va bene solo se ci sono pezzi avanzati sullo standard input. Per andare tranquillo, devi usare una variabile ausiliaria di tipo int (che è il tipo restituito da getchar) e fare un confronto non solo con il carattere di andata a capo, ma anche con il segnale di "nessun carattere letto", che si chiama EOF ed è un valore int diverso da qualsiasi valore char. Così: Codice:
while ((c=getchar))!=EOF && c!='\n') ;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
ziosilvio ho provato a vedere se funzionava solo su windows ma anche su Debian compilando con gcc funziona fflush (stdin)
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
Quote:
percio devo fare cosi: Codice:
while ((c=getchar))!=EOF && c!='\n') testo = c; |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Quote:
Io uso debian da 2 anni, altri miei amici pure. fflush(stdin) non funziona su debian. Inoltre anche se funzionasse su debian non è un buon motivo per usarlo. Se funzionasse su Windows e Linux non è detto che funzioni su BeOS o su FreeBSD. Se non è ANSI C è da evitare come la peste se si vuole avere la portabilità tra compilatori Ciao EDIT: Comunque mi sembra strano che fgets() faccia questo problema, tecnicamente non dovrebbe memorizzare anche il carattere di '\n' nell' array di arrivo?
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8878
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Quote:
![]() La questione è che poi non fa il suo dovere (Tecnicamente dovrebbe dare un risultato inaspettato, come leggere in un array oltre il suo elemento finale) Codice:
FFLUSH(3) Linux Programmer's Manual FFLUSH(3) NAME fflush - flush a stream SYNOPSIS #include <stdio.h> int fflush(FILE *stream); DESCRIPTION The function fflush forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. The open status of the stream is unaffected. If the stream argument is NULL, fflush flushes all open output streams. For a non-locking counterpart, see unlocked_stdio(3). RETURN VALUE Upon successful completion 0 is returned. Otherwise, EOF is returned and the global variable errno is set to indicate the error. ERRORS EBADF Stream is not an open stream, or is not open for writing. The function fflush may also fail and set errno for any of the errors specified for the routine write(2). NOTES Note that fflush() only flushes the user space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed too, e.g. with sync(2) or fsync(2). CONFORMING TO The function fflush() conforms to ANSI X3.159-1989 (``ANSI C''). SEE ALSO fsync(2), sync(2), write(2), fclose(3), fopen(3), setbuf(3), unlocked_stdio(3) BSD MANPAGE 1993-11-29 FFLUSH(3)
__________________
GPU Compiler Engineer Ultima modifica di AnonimoVeneziano : 13-11-2005 alle 11:22. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:37.