Menu
Coddy logo textTech

Input di stringhe con scanf

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 14 di 63.

Ora che hai capito come funzionano le stringhe con il terminatore nullo, è il momento di imparare come ottenere input di stringhe dagli utenti. La funzione scanf può leggere stringhe usando lo specificatore di formato %s, ma presenta importanti limitazioni che devi conoscere.

Per leggere una stringa con scanf, usi il formato %s e passi il nome del tuo array di caratteri (senza l’operatore &, dato che i nomi degli array sono già indirizzi):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

Tuttavia, scanf("%s", ...) ha una limitazione critica: smette di leggere non appena incontra un carattere di spazio bianco (spazio, tabulazione o nuova riga). Ciò significa che se un utente digita "Hello World", scanf acquisirà solo "Hello" e lascerà "World" nel buffer di input.

Un'altra seria preoccupazione è che scanf non controlla se l'input entra nel tuo array. Se qualcuno inserisce una parola più lunga di quanto il tuo array possa contenere, si verificherà un overflow del buffer, che potrebbe causare l'arresto anomalo del programma o creare vulnerabilità di sicurezza. Assicurati sempre che il tuo array di caratteri sia abbastanza grande per l'input previsto.

Nonostante queste limitazioni, scanf("%s", ...) è perfettamente adatto a leggere singole parole, ed è proprio questo che eserciterai nella prossima sfida.

challenge icon

Sfida

Facile

Scrivi un programma in C che mostri come leggere una stringa inserita dall’utente usando scanf e visualizzarla di nuovo. Il programma deve:

  1. Dichiarare un array di caratteri chiamato username con 30 elementi per memorizzare l’input dell’utente
  2. Dichiarare un array di caratteri chiamato hobby con 25 elementi per memorizzare un altro input
  3. Usare printf per mostrare all’utente il messaggio "Enter your username:"
  4. Usare scanf con lo specificatore di formato %s per leggere il nome utente nell’array username
  5. Usare printf per mostrare all’utente il messaggio "Enter your hobby:"
  6. Usare scanf con lo specificatore di formato %s per leggere l’hobby nell’array hobby
  7. Stampare entrambe le stringhe usando printf nel formato esatto mostrato qui sotto

L’input verrà fornito come due parole singole separate (senza spazi all’interno di ciascuna parola).

L’output deve mostrare i risultati nel seguente formato:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

Ad esempio, se l’utente inserisce "Alice" come nome utente e "reading" come hobby, l’output deve essere:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Questa sfida verifica la tua comprensione di come usare scanf con lo specificatore di formato %s per leggere una stringa inserita, della corretta dichiarazione di un array di caratteri con dimensioni sufficienti e di come combinare l’input dell’utente con un output formattato usando printf.

Provalo tu

#include <stdio.h>

int main() {
    // TODO: Dichiara qui i tuoi array di caratteri
    
    // TODO: Scrivi qui il codice per richiedere e leggere l'input
    
    // TODO: Stampa il messaggio finale di output
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online