Guida Linguaggio C: L'Input
3 Dicembre 2007 C
   





Introduzione

In C esistono tre stream predefiniti, stdin (Standard Input), stdout (Standard Output) e stderr (Standard Error). Il file stdin è associato alla tastiera, ogni lettura da tastiera viene vista come una lettura dal file stdin, il file stdout è associato al dispositivo di visualizzazione (il monitor), ogni scrittura sul file stdout viene vista come una scrittura sul monitor, il file stderr è associato tipicamente con il monitor ed è utilizzato per visualizzare messaggi di errore, ogni scrittura sul file stdout viene vista come una scrittura sul monitor.

  1. #include <stdio.h>
  2.  
  3. FILE *stdin;
  4. FILE *stdout;
  5. FILE *stderr;

Il C mette a disposizione delle funzioni sia per l'input che per l'output tramite la Standard Library, funzioni che sono dichiarate in stdio.h.

L'Input

Le funzioni a disposizione per l'input sono le seguenti

Funzioni per l'input
Funzione Descrizione
int getc(FILE *stream) Legge un carattere dallo stream indicato e restituisce il carattere letto convertendolo in un intero.
int getchar(void) Legge un carattere da stdin.
int scanf(char *format, args ...) Legge una sequenza di caratteri da stdin, convertendoli in base alla stringa di formattazione format.
char* gets (char* s) Legge una riga da stdin.

getc

La funzione getc legge un carattere dallo stream indicato e restituisce il carattere letto convertendolo in un intero. Se si è raggiunta la fine del file restituisce EOF, altrimenti restituisce il carattere letto convertito in un intero. Se si è verificato un errore restituisce EOF.

  1. #include <stdio.h>
  2.  
  3. int getc(FILE *f);

Esempio
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. int c;
  6.  
  7. do
  8. c = getc(stdin);
  9. while (c != 32);
  10. }

Nell'esempio si leggono caratteri dallo standard input (stdin) fino a quando non viene digitato un particolare carattere, corrispondente al carattere ASCII 32.

getchar

La funzione getchar() legge un carattere da stdin. Equivale a getc(stdin). Se si raggiunge la fine del file restituisce EOF, se si verifica un errore restituisce EOF.

  1. #include<stdio.h>
  2.  
  3. int getchar(void);

Esempio
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. int c;
  6.  
  7. do
  8. c = getchar();
  9. while (c != 32);
  10. }

Nell'esempio si leggono caratteri dallo standard input (stdin) fino a quando non viene digitato un particolare carattere, corrispondente al carattere ASCII 32.

scanf

La funzione scanf() legge una sequenza di caratteri da stdin e li pone nelle variabili, i cui puntatori sono passati come argomenti della funzione, convertendoli in base alla stringa di formattazione format.

  1. #include <stdio.h>
  2.  
  3. int scanf(const char *format, ...);

Esempio
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. char nome[30], cognome[30];
  6. int eta;
  7.  
  8. printf("Inserire nome, cognome ed età\n");
  9. scanf("%s %s %d",&nome, &cognome, &eta);
  10. }

Viene letta una sequenza di caratteri che viene posta, dopo aver convertito i caratteri come specificato nella stringa di formato ("%s %s %d"), nelle variabili indicate.

Relativamente alla formattazione, le specifiche di conversione che si possono usare nella stringa di formattazione sono le stesse che si possono utilizzare nella printf e viceversa.

gets

La funzione gets legge una riga dallo standard input e la memorizza nell'area di memoria puntata da s. Legge caratteri dallo standard input fino a quando non incontra un carattere di newline o fino a quando non incontra la fine del file.
Restituisce la sequenza di caratteri letta, priva del carattere newline o di EOF, aggiungendo come ultimo carattere il carattere nullo ('\0'), se dopo aver letto alcuni caratteri si arriva alla fine del file restituisce NULL e quei caratteri letti sono restituiti in s. Se si verifica un errore restituisce NULL.

  1. #include <stdio.h>
  2.  
  3. char* gets (char* s);

Esempio
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. char nome[30], cognome[30];
  6.  
  7. printf("Inserire il nome\n");
  8. gets(nome);
  9. printf("Inserire il cognome\n");
  10. gets(cognome);
  11. }

La gets legge la sequenza di caratteri dallo stdin, fino a quando non incontra newline o EOF, e inserisce i caratteri all'interno dell'array nome, aggiungendo come ultimo carattere il carattere nullo.
Analogamente in seguito legge una nuova sequenza di caratteri, fino a quando non incontra newline o EOF, e li inserisce nell'array cognome, aggiungendo come ultimo carattere il carattere nullo.


 
Guida Linguaggio C