1. Introduzione
Fino ad ora abbiamo scritto programmi che erano un po' come una radio: dicevano qualcosa, ma non reagivano mai alle tue parole. Ovviamente, così non si va lontano! Lo scopo della maggior parte dei programmi è fare qualcosa di utile per l'utente. Quindi molto spesso serve che l'utente possa inserire dati dalla tastiera.
Per esempio:
- Una calcolatrice si aspetta che tu inserisca numeri e un'operazione.
- I form su un sito aspettano il tuo nome, e-mail e indirizzo per elaborare una richiesta.
- I videogiochi chiedono il nome del giocatore.
Oggi daremo al nostro programma un microfono! O magari delle orecchie, come preferisci :) Pronto? Andiamo.
2. Conosciamo Console.ReadLine()
Console.ReadLine() è una funzione (o "comando") che permette al programma di ricevere dati che l'utente digita sulla tastiera.
Quando l'esecuzione del programma arriva al comando Console.ReadLine(), il programma si ferma e... aspetta pazientemente finché non scrivi qualcosa e premi Enter. Tutto quello che scrivi prima di premere Enter viene considerato una singola stringa di testo. Questa stringa viene restituita al programma — come se l'utente ti passasse un bigliettino attraverso una finestra.
Esempio base
// Chiediamo all'utente il nome e lo salutiamo
Console.WriteLine("Come ti chiami?");
string userName = Console.ReadLine(); // Qui il programma aspetta l'input!
Console.WriteLine("Ciao, " + userName + "!");
Come funziona:
- Sullo schermo appare: Come ti chiami?
- Tu inserisci, per esempio, Andrea e premi Enter.
- La variabile userName riceve il valore "Andrea".
- Viene mostrato a schermo: Ciao, Andrea!
Nota subito: tutto quello che restituisce Console.ReadLine() è SEMPRE una stringa (tipo string). Anche se l'utente inserisce un numero, sarà comunque una stringa!
3. Esempi
Diamo un'occhiata a come si usa Console.ReadLine() nella pratica.
Esempio 1: inseriamo il nome dell'utente
Console.WriteLine("Inserisci il tuo nome:");
string name = Console.ReadLine();
Console.WriteLine("Benvenuto, " + name + "!");
Esempio 2: mostriamo il risultato su una sola riga
Con l'operatore + puoi unire subito il testo e il risultato dell'input.
Console.Write("Il tuo colore preferito: ");
string color = Console.ReadLine();
Console.WriteLine("Figo! Il tuo colore preferito è " + color + ".");
in questo esempio si usa Console.Write (senza andare a capo), così l'input dell'utente arriva subito dopo la domanda.
Esempio 3: più input di fila
Facciamo un mini-questionario:
Console.Write("Come ti chiami? ");
string name = Console.ReadLine();
Console.Write("Quanti anni hai? ");
string age = Console.ReadLine(); // per ora come stringa
Console.WriteLine("Ti chiami " + name + ", e hai " + age + " anni.");
Vedrai:
Come ti chiami? Vika
Quanti anni hai? 23
Ti chiami Vika, e hai 23 anni.
4. Input numerico: conversione
Qui c'è una trappola molto comune per chi inizia! Console.ReadLine() restituisce sempre una stringa, anche se l'utente ha scritto 123.
Se vuoi ottenere un numero, devi trasformare la stringa nel tipo numerico giusto (per esempio, int). In C# si usano i metodi di conversione, tipo int.Parse() o Convert.ToInt32() — ne abbiamo già parlato nella lezione precedente.
Esempio: chiediamo l'età
Console.Write("Quanti anni hai? ");
string input = Console.ReadLine(); // input = "27", per esempio
int age = int.Parse(input); // Trasformiamo la stringa "27" nel numero 27
Console.WriteLine("Tra un anno avrai " + (age + 1));
se l'utente inserisce qualcosa che non è un numero, il programma lancerà un errore (FormatException). Più avanti impareremo a scrivere codice più robusto, ma per esperimenti semplici va bene così.
5. Errori che sicuramente incontrerai
Dimenticato di convertire in numero:
Provi a usare il valore da Console.ReadLine() come numero senza convertirlo.
string input = Console.ReadLine();
int sum = input + 5; // Errore! Non puoi sommare una stringa a un numero.
Devi convertire in int:
int sum = int.Parse(input) + 5;
Dimenticato di dichiarare la variabile:
name = Console.ReadLine(); // Errore! La variabile name non è dichiarata.
Prima devi dichiarare: string name = Console.ReadLine();
Ordine sbagliato tra input e output:
Chi inizia spesso fa errori buffi. Ma anche i pro li fanno. Solo che hanno la faccia seria :)
string name = Console.ReadLine();
Console.WriteLine("Inserisci il nome: " + name); // Prima devi chiedere, poi leggere!
Ordine giusto:
Console.Write("Inserisci il nome: ");
string name = Console.ReadLine();
Console.WriteLine("Ciao, " + name);
Nota utile
Anche se usi Console.ReadLine() senza mostrare una domanda (tipo solo string x = Console.ReadLine();), il programma ASPETTERÀ l'input. Ma l'utente non capirà cosa deve inserire! Quindi dagli sempre un suggerimento chiaro usando Console.Write() o Console.WriteLine().
GO TO FULL VERSION