GNU/Linux >> Linux Esercitazione >  >> Linux

C Tutorial di programmazione Parte 5 - Variabili di carattere

Nei due tutorial precedenti, abbiamo discusso le basi delle variabili, incluso il modo in cui occupano la memoria. Ma ci siamo concentrati principalmente su numeri interi e float. In questo tutorial parleremo dei caratteri (o delle variabili di tipo char).

Le variabili di tipo 'char' occupano 1 byte (o 8 bit) in memoria. Come accennato in precedenza, in caso di 'int' e 'float', puoi controllare la quantità di memoria che un carattere occupa sul tuo sistema usando il seguente programma C:

#include <stdio.h>

int main (void)
{
printf("\n sizeof char in bytes is %u", sizeof(char));

return 0;
}

Sul mio sistema, l'output era il seguente:

 sizeof char in bytes is 1                                                                                               

Ora arriva la domanda su come accettare i caratteri come input dall'utente e come stamparli in output. Bene, per accettare i caratteri in input, c'è una funzione dedicata chiamata "getchar". Allo stesso modo, per stampare singoli caratteri, hai 'putchar'. Il seguente pezzo di codice dovrebbe darti un'idea migliore di come funzionano queste funzioni:

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
putchar(c);

return 0;
}

Il codice sopra, quando viene eseguito, attende prima che l'utente inserisca un carattere. Dopodiché, emette semplicemente lo stesso carattere sul terminale.

Potrebbe essere un po' sorprendente per te che il valore "getchar" restituito sia archiviato in un numero intero, ma è così (la funzione restituisce un int). Ma puoi sempre confrontare il valore restituito da 'getchar' con un carattere. Ecco un esempio:

#include <stdio.h>

int main (void)
{
int c;
c = getchar();
if(c == 'a')
{
printf("matched");
}
else
{
printf ("doesn't match");
}
return 0;
}

Quindi qui, se l'utente immette "a", il programma stampa "corrispondente" in output. Altrimenti, vedrai "non corrisponde".

Oh, e sì, questa è la prima volta che usiamo le affermazioni "se" e "altro". Come ormai avrai capito, 'if' ti consente di eseguire una serie di istruzioni se una condizione è vera. Quando la condizione 'se' fallisce, l'esecuzione del codice entra automaticamente nel blocco 'else'. Tieni presente che puoi utilizzare un'istruzione 'if' senza e un'istruzione 'else', ma viceversa non è valida.

Ora, tornando a getchar e putchar, discutiamo rapidamente di come queste funzioni possono essere utilizzate per risolvere problemi della vita reale. Supponiamo che tu voglia contare il numero di righe fornite da un utente come input per il tuo programma, quindi puoi farlo nel modo seguente:

#include <stdio.h>

int main (void)
{
int c =0, counter=0;
c = getchar();
while(c != EOF)
{
c = getchar();
if(c == '\n')
counter = counter+1;
}
printf("\n The input contains %d lines \n", counter+1);
return 0;
}

Per comprendere il programma di cui sopra, devi prima sapere cos'è EOF. Bene, EOF sta per End Of File. Viene utilizzato per indicare che l'utente ha terminato di inserire l'input.

Quindi, quando tu, come utente che fornisce input, hai finito con il processo, premi ctrl+d (un paio di volte). È questa azione che produce un valore equivalente a quello di EOF, che può essere verificato nel programma, proprio come abbiamo fatto noi.

Tornando al programma, prima controlla il primo carattere di input per vedere se è EOF. In caso contrario, si entra nel ciclo while e si controlla continuamente ogni carattere fino a ottenere un EOF. Durante l'intero processo, ogni volta che ottieni un carattere di nuova riga (\n), aumenti la variabile 'counter'.

Dopo che e EOF è stato rilevato, il ciclo while viene terminato e si stampa il numero di righe, una in più rispetto al valore di counter.

Il motivo per cui ne aggiungiamo uno a "contatore" nella funzione "printf" è che il numero di righe è sempre uno in più rispetto al numero di caratteri di nuova riga (o in parole povere, il numero di volte in cui l'utente ha premuto il tasto "Invio"). Ovviamente, questo presuppone che ogni volta che l'utente preme invio, inserisca anche del testo.

Quindi, se dai a questo programma un input come il seguente:

Hello 
Welcome to HowtoForge
Thanks  

L'output sarebbe:

The input contains 3 lines

Nota che il nostro codice presuppone che l'utente fornisca almeno una riga. Un paio di custodie angolari non vengono gestite intenzionalmente per mantenere le cose semplici. Uno è quando l'utente fornisce EOF senza fornire alcun altro carattere in input e l'altro è quando è stata fornita una riga senza fornire un carattere di nuova riga.

Il calcolo del numero di righe è solo un esempio. Puoi anche estendere questo codice per calcolare il numero totale di parole inserite dall'utente. Consideralo come un compito e prova a programmarlo da solo. Come suggerimento, direi di considerare gli spazi (' ') e le tabulazioni ('\t'), in modo simile al modo in cui abbiamo considerato le nuove righe ('\n') per calcolare il numero di righe.

In questo tutorial, abbiamo discusso un po' di più sui caratteri, incluso come usarli, accettarli come input e stamparli in output. Abbiamo anche discusso un esempio in cui la funzione getchar ci ha aiutato a calcolare il numero di righe in input. Prova il compito che ho dato nell'ultimo paragrafo e fammi sapere se hai dubbi o domande.


Linux
  1. C Tutorial di programmazione 4 - Variabili e memoria

  2. Tutorial di programmazione C Parte 3 - Nozioni di base sulle variabili

  3. Esercitazione sulla programmazione C Linux Parte 12 - Operatori di assegnazione ed espressioni condizionali

  4. Esercitazione sulla programmazione C Linux Parte 11 - Operatori aritmetici, relazionali e logici

  5. Esercitazione sulla programmazione in Linux C Parte 15 - Complemento a 2 secondi e numeri negativi

Scripting della shell Parte 2:accettazione degli input ed esecuzione dell'aritmetica della shell

Procedura:Introduzione alla programmazione:variabili, tipi e manipolazione dei dati

Esercitazione sulle variabili Bash:6 esempi pratici di variabili globali e locali Bash

Espressioni regolari avanzate nel comando Grep con 10 esempi - Parte II

Espressioni regolari nel comando Grep con 10 esempi - Parte I

Migliori pratiche di codifica per la programmazione di sistemi Linux in linguaggio C – Parte 1