libri-javascript-python

In questa lezione studieremo come utilizzare le funzioni di input e output in linguaggio C.

Le funzioni di input

Le funzioni di input in C che analizzeremo sono scanf, getc e getchar.

scanf()

La funzione scanf consente di acquisire una sequenza di caratteri (lettere o cifre) dalla tastiera e di memorizzarli all’interno di opportune variabili.

Sintassi

scanf(<StringaDiFormato>,[&]Variabile1, [&]Variabile2, ...);
StringaDiFormato: rappresenta lo specificatore di formato ed è introdotta dal simbolo %
Variabile: rappresenta il nome della variabile all’interno della quale dovrà essere memorizzato il dato proveniente dalla tastiera.
&: l’operatore & (se necessario) dovrebbe essere utilizzato per passare l’indirizzo di memoria della variabile. Ma l’operatore & non è sempre necessario per tutte le variabili, dipende dal tipo di dati. Ad esempio, è necessario utilizzare & per leggere dati in tipi di dati non puntatore come int, float, char, ecc., ma non è necessario per tipi di dati puntatore come char*, int*, ecc.

Specificatore di formato

Specificatore di formatoEspresssioneVisualizza sul monitor
%ccharcarattere singolo
%d (%i)intintero decimale con segno
%e (%E)float o doubleformato esponenziale
%ffloat o doublereale con segno
%g (%G)float o doubleutilizza %f o %e in base alle esigenze
%0intvalore in base 8 senza segno
%ppointervalore di una variabile puntatore
%sarray of charstringa (sequenza) di caratteri
%uintintero senza segno
%x (%X)intvalore in base 16 senza segno

Es: scanf("%d", &base);

Il simbolo & davanti alla variabile indica l’indirizzo di memoria in cui si trova la variabile base.

Si interpreta in questo modo: leggi un dato intero e collocalo nella posizione di memoria il cui indirizzo è &base.

Es: scanf("%d %d", &x, &y);

Questa istruzione acquisisce due numeri interi memorizzate nelle variabili x e y

L’omissione di & non comporta nessun messaggio di errore da parte del compilatore, ma comporta degli errori nei risultati.

getc()

La funzione getc è utilizzata per leggere un singolo carattere da un file, ma può leggere anche un carattere da tastiera.

Esempio

#include <stdio.h>

int main() {
    char c;
    
    printf("Inserisci un carattere: "); // Chiede all'utente di inserire un carattere
    c = getc(stdin); // Legge un carattere da tastiera (standard input stdin)
    
    printf("Il carattere inserito è: %c\n", c); // Stampa il carattere letto

    return 0;
}

Dunque la funzione getc() è principalmente utilizzata quando si desidera leggere un singolo carattere da un file o da stdin (standard input).

Ecco alcune tipiche situazioni dove può essere utile:

Lettura da file di testo: Quando si desidera leggere un carattere per volta da un file di testo, ad esempio per analizzarne il contenuto o eseguire operazioni specifiche su di esso.

Interazione con l’utente: Per la lettura di input da parte dell’utente da tastiera quando si desidera leggere un solo carattere alla volta. Ad esempio, nei menu a selezione singola o in applicazioni che richiedono un input di carattere singolo.

Analisi dei dati: In alcune situazioni, si potrebbe dover analizzare o elaborare i dati carattere per carattere anziché linea per linea. getc() può essere utile in tali scenari.

In generale, getc() è utilizzata ogni volta che è necessario leggere un singolo carattere, sia da un file che da stdin, ed è utile in una vasta gamma di applicazioni che coinvolgono l’input e l’output di dati di carattere singolo. Ma per la lettura di righe intere di testo, è più conveniente utilizzare altre funzioni come fgets().

getchar()

La funzione getchar() è utilizzata per leggere un singolo carattere dalla tastiera, e corrisponde ad un’applicazione specifica della funzione getc() quando viene passato stdin come argomento. In pratica, getchar() è equivalente a getc(stdin).

Utilizzo:

La funzione getchar() viene utilizzata principalmente quando è necessario leggere un singolo carattere dalla tastiera. Ad esempio, può essere utilizzata per implementare un semplice programma che acquisisce un singolo carattere da tastiera e lo utilizza per prendere decisioni o eseguire azioni.

Esempio:

#include <stdio.h>

int main() {
    char c;
    
    printf("Inserisci un carattere: "); // Chiede all'utente di inserire un carattere
    c = getchar(); // Legge un carattere da tastiera
    
    printf("Il carattere inserito è: %c\n", c); // Stampa il carattere letto
    
    return 0;
}

In questo esempio, getchar() viene utilizzata per leggere un singolo carattere dalla tastiera e memorizzarlo nella variabile c, che viene poi stampata a schermo.

In sintesi, getchar() è utile quando si desidera leggere un singolo carattere dalla tastiera e si preferisce una sintassi più concisa rispetto a getc(stdin).

Le funzioni di output

Le funzioni di output in C che studieremo sono: printf, putc e putchar.

printf()

La forma sintattica è la seguente:

printf(<StringaDiFormato>,[, <Argomenti>]);

  • <StringaDiFormato> è una stringa di caratteri che può contenere specificatori di formato.
  • <Argomenti> sono gli argomenti da stampare nella stringa di formato.

Es: printf("Base: %d", base);

Stampa a video il valore intero della base.

La sequenza di escape

Le sequenze di escape sono dei caratteri che non vengono visualizzati, ma contribuiscono a formattare il testo. Tutte le sequenze di escape iniziano con il carattere di backslash (\) e sono interpretate come un singolo carattere.

Sequenza di escapeDescrizione
\nnuova riga (new line)
\ttabulazione (tab)
\asegnale sonoro (alert)
\fnuova pagina (form feed)
\rritorno a capo della stessa riga
\vtabulazione verticale
\buna battuta indietro (backspace)
\\barra rovesciata (backslash)
\’apice singolo
\”doppi apici
\?punto di domanda
\0fine stringa
\<CifraOttale>numero ottale
\<CifraEsadecimale>numero esadecimale

Esempio

int base = 10;
printf("Base: %d", base);

putc()

La funzione putc() è utilizzata per scrivere un singolo carattere su un file o su un dispositivo di output specificato.

La sintassi è la seguente:

int putc(int char, FILE *stream);

  • char: Il carattere da scrivere sul file o sul dispositivo di output.
  • stream: Il puntatore al file o al dispositivo di output su cui si desidera scrivere il carattere.

Esempio

#include <stdio.h>

int main() {
    char c = 'a';
    FILE *file_pointer;

    // Apre il file "output.txt" in modalità scrittura
    file_pointer = fopen("output.txt", "w");

    // Verifica se il file è stato aperto correttamente
    if (file_pointer != NULL) {
        putc(c, file_pointer); // Scrive il carattere 'a' nel file
        fclose(file_pointer); // Chiude il file
        printf("Il carattere è stato scritto correttamente nel file.\n");
    } else {
        printf("Impossibile aprire il file.\n"); // Messaggio di errore se il file non può essere aperto
    }

    return 0;
}

In questo esempio, il carattere 'a' viene scritto nel file “output.txt” utilizzando putc(). Il file viene aperto in modalità scrittura ("w") e il carattere viene scritto utilizzando il puntatore di file file_pointer. Infine, il file viene chiuso con fclose(). Se il file non può essere aperto correttamente, verrà visualizzato un messaggio di errore.

Assicuriamoci di avere i permessi necessari per scrivere sul file e che il percorso specificato sia corretto. Se il file non esiste, verrà creato; se esiste già, il suo contenuto verrà sovrascritto.

putchar()

La funzione putchar() è utilizzata per scrivere un singolo carattere su stdout.

La sintassi è la seguente:

int putchar(int c);

c: rappresenta il carattere da scrivere su stdout.

Funzionamento:

Quando chiamiamo putchar(), il carattere c viene scritto sullo standard output, che è generalmente la console o il terminale in cui il programma è in esecuzione. Il carattere verrà quindi visualizzato sullo schermo.

Esempio

#include <stdio.h>

int main() {
    char c = 'a';
    putchar(c); // Scrive il carattere 'a' su stdout (generalmente la console)
    return 0;
}

In questo esempio, stiamo utilizzando putchar() per scrivere il carattere 'a' su stdout. Quando il programma viene eseguito, il carattere 'a' verrà visualizzato sulla console.

Nota:

  • putchar() è simile a putc(), ma è progettato specificamente per scrivere un singolo carattere su stdout. Inoltre, restituisce il carattere scritto come un valore intero, o EOF in caso di errore.

La funzione putchar() è utile quando si desidera scrivere un singolo carattere senza dover aprire o chiudere un file. È particolarmente comoda per la stampa di singoli caratteri su stdout, come messaggi di testo, prompt o caratteri di separazione.

Altre funzioni di input/output

Oltre alle funzioni di input e output discusse precedentemente, ci sono molte altre funzioni utili disponibili nel linguaggio C. Ecco alcune di esse:

  1. Funzioni di Input da File:
    • fgets(): Utilizzata per leggere una riga di testo da un file.
    • fscanf(): Simile a scanf(), ma legge input da un file anziché dalla tastiera.
  2. Funzioni di Output su File:
    • fputs(): Utilizzata per scrivere una stringa su un file.
    • fprintf(): Simile a printf(), ma scrive output su un file anziché su stdout.
  3. Gestione dei File:
    • fopen(): Utilizzata per aprire un file.
    • fclose(): Utilizzata per chiudere un file aperto.
    • feof(): Utilizzata per verificare se è stata raggiunta la fine di un file.
  4. Funzioni di Input/Output Binario:
    • fread(): Utilizzata per leggere blocchi di dati da un file binario.
    • fwrite(): Utilizzata per scrivere blocchi di dati in un file binario.
  5. Gestione del Puntatore di File:
    • ftell(): Utilizzata per ottenere la posizione corrente nel file.
    • fseek(): Utilizzata per spostare il puntatore di file a una posizione specificata nel file.
  6. Funzioni di Output su Standard Error:
    • fprintf(stderr, ...): Simile a fprintf(), ma scrive output su stderr, che di solito è associato all’output degli errori anziché alla console.

Queste sono solo alcune delle funzioni più comuni per l’input e l’output in C. Ogni funzione ha le proprie caratteristiche e scopi specifici, e la scelta della funzione da utilizzare dipenderà dalle esigenze del programma e del tipo di dati con cui si sta lavorando.

Conclusioni

In questo articolo abbiamo esaminato le funzioni di input e output in linguaggio C, con un focus su scanf(), getc(), getchar(), putc(), e putchar().

Ecco un breve riassunto di quanto discusso:

  1. Funzioni di Input:
    • scanf(): Utilizzata per acquisire input dalla tastiera e memorizzarlo in variabili specificate. È necessario specificare il formato di input utilizzando specificatori di formato come %d, %f, %c, ecc.
    • getc(): Utilizzata per leggere un singolo carattere da un file. Può anche leggere un carattere dalla tastiera.
    • getchar(): Simile a getc(), ma specificamente utilizzata per leggere un carattere dalla tastiera.
  2. Funzioni di Output:
    • putc(): Utilizzata per scrivere un singolo carattere su un file o su un dispositivo di output specificato.
    • putchar(): Simile a putc(), ma specificamente utilizzata per scrivere un singolo carattere su stdout.
  3. Utilizzi Principali:
    • scanf(), getc(), e getchar() sono utilizzate per l’input da tastiera o da file.
    • putc() e putchar() sono utilizzate per l’output su file o su dispositivi di output specificati.
  4. Sequenze di Escape:
    • Abbiamo esaminato alcune sequenze di escape comuni utilizzate per formattare il testo in C, come \n, \t, \b, ecc.
  5. Considerazioni Finali:
    • È importante utilizzare correttamente le funzioni di input e output in base alle esigenze del programma.
    • Le sequenze di escape possono essere utili per formattare il testo in modo appropriato.

In sintesi, le funzioni di input e output in C forniscono gli strumenti necessari per acquisire input dall’utente, leggere e scrivere su file, e gestire l’output dei programmi. Con una comprensione chiara di queste funzioni e delle sequenze di escape, è possibile sviluppare applicazioni C più efficaci e flessibili.

N.B.: Assicuriamoci sempre di gestire gli errori in modo appropriato durante l’utilizzo delle funzioni di input e output, controllando il valore restituito dalle funzioni e gestendo situazioni inaspettate in modo adeguato.

Alcuni link utili

Introduzione al linguaggio C

Le variabili in C

Le costanti in C

Printf

Tipi di operatori

Operatori di confronto

Stdin

Le funzioni di input e output

Scanf

Area di un rettangolo in C

Media in C

Casting in C