Ho avuto un sacco di problemi cercando di capire come usare scanf()
. Sembra funzionare bene con numeri interi, essendo abbastanza diretto scanf("%d", &i)
.Parsing input con scanf in C
In cui sono in esecuzione problemi con scanf()
nei loop che tentano di leggere l'input. Per esempio:
do {
printf("counter: %d: ", counter);
scanf("%c %c%d", &command, &prefix, &input);
} while (command != 'q');
Quando entro in una validamente ingresso strutturato come
c P101
, sembra ciclo di nuovo davanti a me chiedere conferma. Questo sembra accadere anche con un singolo:scanf("%c", &c)
in un ciclo while. Farà il ciclo due volte prima di richiamarmi di nuovo. Che cosa lo rende loop due volte e come lo interrompo?
Quando inserisco una quantità inferiore di input che a livello di programmazione non avrebbe un altro carattere o numero come
q
, premere Invio sembra richiedere di inserire altro. Come posso ottenerescanf()
per elaborare le voci sia a singolo che a doppio carattere?
Ottima spiegazione, sospettavo che dovesse leggere il \ n, ma questo ha certamente complicato quello che pensavo fosse un semplice parsing. Analizzerò fgets e sscanf(). – zxcv
Prenderesti in considerazione l'aggiunta di un paragrafo sulla verifica del valore di ritorno da 'scanf()' per assicurarti di ottenere ciò che ti aspettavi. A meno che tu non sia a conoscenza di una domanda precedente, è probabile che diventi la Q & A canonica per questo problema, ma la risposta canonica dovrebbe coprire tutti i punti ragionevoli e penso che il ritorno da 'scanf()' sia un punto ragionevole.Fai un commento mirato a me quando lo fai; Quindi rimuoverò questo commento e contrassegno il tuo commento per la rimozione (oppure puoi contrassegnarlo come obsoleto, ma mi piacerebbe sapere che hai apportato le modifiche). Grazie. –