Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-12-2009, 09:41   #1
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
[C] problema scanf

ciao a tutti il mio problema è questo.
mi sto esercitando per l'esame di programmazione e qualche giorno fa mi capitò che uno scanf per un carattere non mi funzionava anche se a mio avviso la sintassi è corretta.cmq continuai ad esercitarmi.

oggi mi ritrovo dinanzi ad un altro scanf per l'aquisizione di un carattere e ancora problemi

in pratica ho un ciclo do while con la condizione che (choice=='y')

ora questo scanf mi fa saltare tutto:
printf("Would you like to play again? (y or n)?\n");
scanf("%c", &choice);

la variabile è char choice='y';

spero riuscite a capire perchè gli scanf per i caratteri non mi funzionano cosa sbaglio???
grazieeeeeee
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 11:11   #2
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Non conosco il C ma prova ad usare getchar() che restituisce un int(il carattere letto).

Codice:
int getchar()
Forse nel tuo caso prendi il carattere da tastiera ma l'invio rimane nel buffer e fa macelli.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 11:25   #3
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Non conosco il C ma prova ad usare getchar() che restituisce un int(il carattere letto).

Codice:
int getchar()
Forse nel tuo caso prendi il carattere da tastiera ma l'invio rimane nel buffer e fa macelli.
si ma io dovrei usare cose che abbiamo affrontato durante il corso
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 11:44   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Non avete fatto la funzione getchar()? Vi ha mai parlato della funzione fflush()? Prova a mettere subito dopo la scanf questa istruzione:

Codice:
fflush(stdin);
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 11:54   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Non avete fatto la funzione getchar()? Vi ha mai parlato della funzione fflush()? Prova a mettere subito dopo la scanf questa istruzione:

Codice:
fflush(stdin);
fflush non si usa per stdin. Non è un utilizzo previsto dallo standard.

Spiega meglio cosa ti succedeva. Hai usato qualche altra funzione per l'input oltre a scanf ? Ad esempio gets ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 12:05   #6
BlackAuron
Member
 
Iscritto dal: May 2006
Messaggi: 86
Prova a postare il codice per intero, di certo è più utile che qualche riga qua e la e sicuro di aver dichiarato choice come char e non come stringa? a quel punto l'& andrebbe levato.

PS: quando posti codice, scrivilo all'interno degli appositi tag
Codice PHP:
(PHP)(/PHP
con le quadre al posto delle tonde
BlackAuron è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 14:40   #7
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
Codice PHP:
int main(){
    
char choice='y';
    do{

        
        
scanf("%d", &guess);
        
        if(
guess>number){
           
x++;
        }
        if(
guess<number){
           
y++;
        }    
        if(
guess==number){
           
printf("Would you like to play again? (y or n)?\n");
           
scanf("%c", &choice);
        }
    }while(
choice=='y'); 
questi sono i punti salienti del programma
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 15:08   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
C'è un invio che resta nello stdin.
Il problema è dovuto a scanf con %c che legge qualsiasi carattere presente nello stdin, anche uno '\n', cioè l'invio.
La prima scanf lascia l'invio nello stdin, la seconda trova l'invio, lo assegna a choice ed esce perché choice è diverso da 'y'.
se potessi usare la getchar si farebbe:

while(getchar() != '\n');

Legge tutti i caratteri nello stdin fino a quando non trova uno '\n'.
Visto che la puoi usare per togliere lo '\n' puoi fare così:

do scanf("%c", &choice); while(choice != '\n');

E dopo leggi nuovamente choice.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2009, 23:43   #9
BlackAuron
Member
 
Iscritto dal: May 2006
Messaggi: 86
alternativamente ( e vado a memoria), modifica lo scanf cosi:
Codice PHP:
scanf("%d\n", &guess); 
e leggi direttamente con lo scanf pure l'invio
BlackAuron è offline   Rispondi citando il messaggio o parte di esso
Old 12-12-2009, 07:19   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Così non funziona Anzi, ti chiede un nuovo input da stdin che dopo ti rimane nel buffer.

Così semmai posso leggere sia l'intero che lo '\n':

scanf("%d%c", &guess, &tmp);

Ultima modifica di cionci : 12-12-2009 alle 07:22.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2009, 19:21   #11
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
RISOLTO!!!


Codice PHP:
int main(){
    
char c;
    
printf("inserire carattere: ");
    
scanf("%c", &c);
    
printf("il carattere immesso:  %c\n"c);

ho scritto questo spezzone di codice per far capire che per l'immissione di caratteri questo funziona
mentre per l'immissione di stringhe:
Codice PHP:
int main(){
    
char string[20];
    
printf("inserire stringa: ");
    
scanf("%s"string);
    
printf("string is: %s\n"string);

questo spiega che era solo un problema di SPECIFICA DI CONVERSIONE.
per i singoli caratteri si usa %c


ciao a tutti e grazie
spero di essere stato utile!!!
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2009, 19:24   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma tu già usavi %c
Il problema è leggere con %c dopo che hai letto con altri specificatori di formato.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 10:50   #13
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
Quote:
Originariamente inviato da cionci Guarda i messaggi
Ma tu già usavi %c
Il problema è leggere con %c dopo che hai letto con altri specificatori di formato.

ah......
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 11:09   #14
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
Quote:
Originariamente inviato da cionci Guarda i messaggi
C'è un invio che resta nello stdin.
mi sono soffermato tu questo punto e informandomi un pò ho capito che ogni volta che si inserisce un numero (o chicchessia) in input il numero viene inserito in in area di memoria chiamata buffer e da lì lo scanf legge e porta nella variabile dove devono essere memorizzati però!
il però è che lo scanf non si prende l'invio che resta quindi nel buffer, di conseguenza al successivo scanf del famoso carattere si va a prendere l'invio e non considera il carattere e quindi una soluzione che ho trovato è

Codice PHP:
scanf("\n%c",&carattere
che legge il carattere invio e lo scarta, poi legge il carattere successivo e questo viene assegnato alla variabile.
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 11:11   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
In effetti è quello che ti ripetiamo dall'inizio

Sulla tua soluzione, non lo so, non l'ho mai provata.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 11:44   #16
bobosg
Senior Member
 
L'Avatar di bobosg
 
Iscritto dal: Jun 2008
Messaggi: 551
provaci, funziona!!!
__________________
Se non hai ancora deciso per il tuo futuro
Don'T panic!!!
segui le tue passioni, ti porteranno lontano.
bobosg è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Il telescopio spaziale James Webb ha cat...
Amazon scatenata nel weekend: sconti sug...
Pulizia per 45 giorni senza pensieri: il...
Apple taglia il prezzo degli AirPods Pro...
Tutti i MacBook Air M4 2025 da 13 pollic...
Roborock QV 35A a 429€ o Dreame L40 Ultr...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
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: 16:36.


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