Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-11-2005, 19:26   #1
max246
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);
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 19:47   #2
ianaz
Senior Member
 
L'Avatar di ianaz
 
Iscritto dal: Jan 2005
Città: London, United Kingdom
Messaggi: 959
ASD MAX
Non ne ho idea
__________________
zattix
ianaz è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 19:49   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
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: 8897
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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 20:43   #4
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da Fenomeno85
prova fare un fflush (stdin);
Per la centesima volta: lo standard ANSI C non definisce il comportamento di fflush su uno stream di input, quindi fflush(stdin) non è standard e non è portabile?

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" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 20:48   #5
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Quote:
Originariamente inviato da Ziosilvio
Per la centesima volta: lo standard ANSI C non definisce il comportamento di fflush su uno stream di input, quindi fflush(stdin) non è standard e non è portabile?

Per rimuovere i caratteri di troppo dallo standard input, si può fare così:
Codice:
while (getchar() != '\n')
    ;

na io voglio gli spazi ^^
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 20:51   #6
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da max246
io voglio gli spazi
Infatti il while sulla getchar va dopo la chiamata a fgets.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2005, 20:53   #7
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Quote:
Originariamente inviato da Ziosilvio
Infatti il while sulla getchar va dopo la chiamata a fgets.

sono cofuso cosa mi serve??

io voglio solo inserire una descrizione in una variabile :S
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 00:09   #8
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da max246
sono cofuso cosa mi serve?
Allora: quando tu scrivi qualcosa sulla riga di comando, i caratteri corrispondenti ai tasti che hai premuto vengono inseriti sullo standard input.
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" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 10:57   #9
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
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: 8897
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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 12:03   #10
max246
Senior Member
 
Iscritto dal: May 2005
Messaggi: 340
Quote:
Originariamente inviato da Ziosilvio
Allora: quando tu scrivi qualcosa sulla riga di comando, i caratteri corrispondenti ai tasti che hai premuto vengono inseriti sullo standard input.
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')
    ;

percio devo fare cosi:

Codice:
 
while ((c=getchar))!=EOF && c!='\n')
    testo = c;
????
max246 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 12:08   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
ziosilvio ho provato a vedere se funzionava solo su windows ma anche su Debian compilando con gcc funziona fflush (stdin)

~§~ Sempre E Solo Lei ~§~
E' impossibile .

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
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 12:14   #12
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
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: 8897
Quote:
Originariamente inviato da AnonimoVeneziano
E' impossibile .

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?
a me lo compila e non da nessun problema avrò una versione di debian tarocca.

~§~ 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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2005, 12:18   #13
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Fenomeno85
a me lo compila e non da nessun problema avrò una versione di debian tarocca.

~§~ Sempre E Solo Lei ~§~
Vabbè, anche a me lo compila (Non da neanche un warning, perchè il tipo di argomento passato è quello corretto, un puntatore a un buffer, solo che il tipo di buffer è sbagliato per la funzione fflush(), ma quello va a discrezione del programmatore)

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 12:22.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Meta moltiplica gli investimenti in data...
Addio riflessi fastidiosi? Samsung prese...
PlayStation 5, doccia fredda da Sony: i ...
Super Meat Boy 3D: annunciata la data d'...
XT View Matrix, il mid-tower Phanteks ch...
David Sacks lascia il ruolo di 'Crypto C...
LG All Stars 2026: quando l'installatore...
Addio ad Anna's Archive? Ecco la mossa l...
Addio al Mac Pro, Apple mette fine a un ...
Panasonic a MCE 2026: la rivoluzione sil...
Netflix alza la posta: il piano Premium ...
Nimbus Innovation Awards – Cloud Edition...
Wikipedia vieta i contenuti generati dal...
Niente volante, niente schermi: cos&igra...
Gli 'Avengers' di Windows sono tornati: ...
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: 17:18.


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