L’hardcoding dei numeri va bene per un primo tentativo, ma il software reale deve reagire a ciò che le persone digitano. Lo snippet originale utilizzava costanti. È statico. Prevedibile. Noioso.
Per rendere utile un programma, è necessario estrarre i dati dall’utente in fase di esecuzione. Puoi farlo con “scanf”. È la controparte di “printf”. Laddove printf invia i dati allo schermo, “scanf” li preleva dalla tastiera.
Ecco come gestisci l’input intero di base in C.
Acquisizione dell’input dell’utente
Non puoi semplicemente dichiarare una variabile e aspettarti che contenga magicamente i dati dell’utente. Devi chiederlo. È inoltre necessario indicare al computer dove archiviare i dati. Ecco perché scanf richiede un puntatore (il simbolo & ). Se dimentichi la e commerciale, il programma si bloccherà o scriverà spazzatura in memoria. Includilo sempre per i tipi primitivi come “int”.
Considera questa logica aggiornata:
- Dichiarare variabili per contenere l’input e il risultato.
- Chiedi conferma all’utente in modo che sappia cosa digitare.
- Utilizzare
scanfcon l’identificatore di formato corretto (%dper i numeri interi). - Esegui il calcolo utilizzando i valori memorizzati.
- Esegui l’output del risultato mescolando le variabili di input nella stringa di stampa.
Perché è importante
Il passaggio dalle costanti alle variabili cambia tutto. Il programma non è più un disco rotto. Si adatta. Puoi eseguirlo una volta con 5 e 7. Puoi eseguirlo nuovamente con 100 e 200. La logica rimane la stessa; i dati cambiano.
Questa è la base delle applicazioni CLI (Command Line Interface) interattive. Prima di poter creare strumenti complessi, devi capire come inserire i dati nelle tue variabili in modo sicuro.
Punti chiave
scanfnecessita di un puntatore: Utilizza sempre l’operatore indirizzo di (&) prima del nome della variabile inscanf.- Gli specificatori di formato devono corrispondere: Se stai leggendo un
int, devi utilizzare%d. L’utilizzo di%fper un numero intero causerà un comportamento indefinito. - I prompt sono cruciali: Senza un prompt chiaro come “Inserisci il primo valore:”, l’utente resta a fissare un cursore lampeggiante, chiedendosi se il programma è bloccato. Non lo è. Sta solo aspettando.
Il codice funziona. È semplice. Ma è funzionale. Sei passato da uno script statico a uno strumento dinamico. Il passaggio successivo è solitamente la gestione degli errori. Cosa succede se l’utente digita “ciao” invece di un numero? scanf fallirà silenziosamente, lasciando le variabili non inizializzate. Questo è un problema per un altro giorno.
Per ora, hai un programma che ascolta davvero.
Input, output e regole di ingaggio
Hai apportato le modifiche. Ora compila. Eseguilo. Se si blocca, niente panico. Probabilmente manca un piccolo dettaglio di sintassi.
Prendi “scanf”. Imita printf nell’uso delle stringhe di formato. Digita “man scanf” se hai bisogno delle clausole scritte in piccolo. Ma presta attenzione alla e commerciale (& ) prima di variabili come “a” e “b”.
Questo è l’operatore indirizzo.
Restituisce l’indirizzo di memoria della variabile. Potrebbe sembrare confuso ora. I puntatori lo chiariranno più avanti. Ma per ora, segui la regola: se stai usando scanf su un char, int o float, hai bisogno di &. Ne hai bisogno anche per le strutture.
Saltare il &? Riceverai un errore di runtime. Rompilo intenzionalmente. Guarda cosa succede. È l’unico modo per ricordare perché è importante.
Formattazione precisa dell’output
Analizziamo printf. Inizia in modo semplice.
printf("Ciao");
Questo invia la parola “Ciao” allo standard output. Nient’altro. Nessuna nuova riga. Il cursore rimane subito dopo la “o”.
Ora aggiungi una nuova riga.
printf("Ciao\n");
Il \n attiva un ritorno a capo. L’output termina sulla propria linea. Questa è l’aspettativa standard per un output della console pulito.
Le variabili richiedono segnaposto. Per stampare il valore di “b”:
printf("%d", b);
Il %d è un segnaposto. Quando il codice viene eseguito, “printf” lo scambia con il valore intero effettivo di “b”.
Puoi incorporare valori nelle frasi. Potresti concatenare più chiamate:
printf("La temperatura è "); printf("%d", b); printf("gradi\n");
Ma è noioso. L’approccio più pulito li combina in un’unica stringa di formato:
printf("La temperatura è %d gradi\n", b);
Funzionano anche valori multipli.
printf("%d + %d = %d\n", a, b, c);
Ecco la trappola. Il numero di segnaposto nella stringa di formato deve corrispondere al numero di variabili che la seguono. Esattamente.
Se hai tre tag %d, hai bisogno di tre parametri. I tipi devono corrispondere. L’ordine deve corrispondere. Non corrispondono a questi? L’output sarà spazzatura. O peggio, si schianterà.
Corrispondenza dei tipi con i segnaposto
printf gestisce la maggior parte dei tipi C standard. Hai solo bisogno del codice giusto.
- int utilizza
%d - float utilizza
%f - char utilizza
%c - Le stringhe di caratteri utilizzano
%s
Per sfumature più profonde, controlla man 3 printf su un sistema UNIX. Il tuo compilatore specifico avrà probabilmente un manuale o un file di aiuto che copre i casi limite.
Insidie comuni
I nuovi sviluppatori ci inciampano ripetutamente.
La distinzione tra maiuscole e minuscole è rigorosa. “printf” è minuscolo. Printf o PRINTF falliranno.
scanf richiede l’operatore dell’indirizzo (& ). Dimenticalo e il programma non memorizzerà correttamente il tuo input.
Il conteggio dei parametri è importante. Troppi o troppo pochi argomenti in “printf” o “scanf” portano a un comportamento indefinito.
La dichiarazione viene prima dell’uso. Non è possibile utilizzare un nome di variabile in C senza prima dichiararlo. Il compilatore deve conoscere in anticipo il layout e il tipo di memoria.
Il compilatore non indovina. Fa rispettare.






















