Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
Ad Appian Europe 2025, l'azienda parla molto della sua visione di cos'è e come dovrebbe essere usata l'intelligenza artificiale: è uno strumento che va sempre adoperato dalle persone, che devono rimanere responsabili dei processi all'interno dell'azienda. Non è un giocattolo con cui sperimentare, ma un aiuto per superare le sfide di business più importanti
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-12-2009, 10: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, 12: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, 12: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, 12: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, 12: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, 13: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, 15: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, 16: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 12-12-2009, 00: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, 08: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 08:22.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2009, 20: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, 20: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, 11: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, 12: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, 12: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, 12: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


DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
Questo robot gioca a Basket come un prof...
Cyberpunk 2077: vendite che superano le ...
Chat Control in bilico: il Parlamento Eu...
Ecco i Google Pixel più convenienti per ...
ChatGPT e Copilot sono pronti ad abbando...
iPhone 16e a 529€ nei 2 colori per il Bl...
Il nuovo iPhone Fold potrebbe costare qu...
Tomb Raider segna due nuovi record: Lara...
Come sfruttare le offerte del Black Frid...
Wafer in diamante per il futuro dei chip...
Per il Black Friday sedie gaming di otti...
Guerra dei chip: Intel sfida TSMC e dife...
Black Friday: super cali di prezzo sulla...
Vuoi un'auto che suoni come un teatro? E...
Kirin 9030 è molto più len...
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: 10:53.


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