Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-11-2005, 18: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, 18: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, 18: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: 8895
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, 19:43   #4
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
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, 19: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, 19:51   #6
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
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, 19: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 12-11-2005, 23:09   #8
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16211
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, 09: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: 8895
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, 11: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, 11: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, 11: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: 8895
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, 11: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 11:22.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Nothing guarda al futuro: nuovi finanzia...
Realme punta sulla fascia bassa: arriva ...
Interlune creerà un centro di ric...
Stop Killing Games: 97% delle firme conv...
La GTX 2080 Ti mai arrivata sul mercato,...
Hoolow Knight: Silksong, il gioco che a ...
Duolingo crolla in Borsa: la minaccia ar...
Battlefield 6: i giocatori console potra...
Citroen Racing, la marca ritorna alle co...
Windows 10 ESU: come partecipare al prog...
ASUS Vivobook 16X a meno di 470€ su Amaz...
Con Agent Payments Protocol di Google gl...
Windows 10 muore, gli attivisti insorgon...
NVIDIA sarà il primo cliente di T...
Stellantis cancella il pick-up elettrico...
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: 05:50.


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