Le funzioni getchar() e putchar() in C servono a memorizzare e visualizzare le stringhe.

La funzione getchar() permette di leggere un singolo carattere sul monitor mentre la funzione putchar() serve a visualizzare un singolo carattere sul monitor.

Con l’utilizzo di getchar() l’input fornito dall’utente viene gestito mediante un buffer dove andremo a memorizzare tutti i caratteri che l’utente immetterà da tastiera e alla fine, cioè a chiusura del buffer, viene aggiunto il carattere LF (\n) ovvero Line feed.

Definizione di buffer
Un buffer è un’area di memoria usata temporaneamente per l’input o l’output dei dati.

Per capire il funzionamento delle funzioni getchar() e putchar() in C realizziamo subito un semplice esempio che permette di inserire e leggere una stringa.

Dichiariamo una stringa nome di 12 caratteri e finché non viene premuto enter e la lunghezza della stringa non è minore di N inseriamo i singoli caratteri in un buffer temporaneo utilizzando la funzione getchar(). Quando si premerà enter si memorizzeranno nella stringa nome.

Successivamente, per leggere la stringa inserita, utilizziamo la funzione putchar() con un ciclo for.

Esempio di utilizzo delle funzioni getchar() e putchar() in C

#include <stdio.h>

int main(){	
  char nome[12];
  int i,n,N=0;
  char ch;

  printf("inserisci il nome ");
  ch=getchar();

  while(ch!='\n' && N<12)
  { 
     nome[N++]=ch;
     ch=getchar();
  }

  for(i=0; i<N; i++)
      putchar(nome[i]);

  return 0;
}

Facciamo un altro esempio riprendendo l’argomento sulla concatenazione delle stringhe che abbiamo affrontato precedentemente, ma stavolta utilizziamo la funzione getchar().

for(i=0; (nome[i]=getchar())!=’\n’; i++)
;
nome[i]=’\0′;

In questo modo ad ogni iterazione il valore i viene incrementato di 1 e il valore immesso viene inserito nel corrispondente elemento dell’array nome, finché non viene premuto il tasto enter.

Il carattere terminatore lo aggiungo alla fine.

#include <stdio.h>

int main() {
  int i,j;
  char saluto[27]="Ciao, mi chiamo ";
  char nome[11];

  printf("inserisci il nome: ");

  for(i=0; (nome[i]=getchar())!='\n'; i++)
   ;
  nome[i]='\0';

 for(i=0; (saluto[i])!='\0'; i++)
  ;

  for(j=0; (saluto[i]=nome[j])!='\0'; i++, j++);
  ;

  printf("%s",saluto);
  return 0;
}

Dobbiamo precisare che l’evento per terminare l’inserimento di caratteri potrebbe essere diverso da \n.

Ad esempio possiamo far terminare l’inserimento della stringa quando inseriamo un punto oppure un punto esclamativo o ancora un altro carattere a piacere.

Nell’esempio sotto l’inserimento verrà terminato non appena digiteremo da tastiera il punto.

for(i=0; (nome[i]=getchar())! = ‘ . ‘ ; i++)
;

Inoltre, sempre per essere più precisi potremmo inserire un controllo sulla lunghezza della stringa, in quanto in C non c’è nessun controllo nel rispetto delle dimensioni degli array e quindi i caratteri eccedenti comunque andrebbero ad occupare aree di memoria.
Allora sarebbe da preferire indicare il controllo come da esempio:

for(i=0; ((nome[i]=getchar())!= ‘ . ‘ ) && (i<11); i++)
;

Chiaramente questi sono degli esempi di uso delle funzioni getchar() e putchar() proponete pure sotto nei commenti le vostre osservazioni.


Alcuni link utili:

Uso della libreria string.h

Concatenare due stringhe in C

Array di caratteri in C

Ricerca di un elemento in una matrice

Prodotto tra matrici in C

Somma tra due matrici in C

Array multidimensionali

Tavola pitagorica in C

Array o vettori in linguaggio C

Media dei numeri in un array in linguaggio C

Esempio di array con numeri random in C

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C