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.
Sfida
FacileScrivi un programma in C che mostri come leggere una stringa inserita dall’utente usando scanf e visualizzarla di nuovo. Il programma deve:
- Dichiarare un array di caratteri chiamato
usernamecon 30 elementi per memorizzare l’input dell’utente - Dichiarare un array di caratteri chiamato
hobbycon 25 elementi per memorizzare un altro input - Usare
printfper mostrare all’utente il messaggio "Enter your username:" - Usare
scanfcon lo specificatore di formato%sper leggere il nome utente nell’arrayusername - Usare
printfper mostrare all’utente il messaggio "Enter your hobby:" - Usare
scanfcon lo specificatore di formato%sper leggere l’hobby nell’arrayhobby - Stampare entrambe le stringhe usando
printfnel 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;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online