prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


2.8 Immissione ed emissione di dati

Il programma scritto non calcola l'area di un qualsiasi rettangolo ma soltanto di quello che ha per base 3 e per altezza 7, supponiamo centimetri.

Per esempio, per trovare l'area di un rettangolo di base 57 e altezza 20 si deve intervenire sul programma stesso, scrivendo

#define BASE 57
#define ALTEZZA 20

Oppure nel caso della versione del programma dove non si sono utilizzate le costanti ma le variabili, si dovrebbe scrivere

base = 57; 
altezza = 20;

Dopo aver effettuato nuovamente la compilazione, la successiva esecuzione restituirà 1140, cioè l'area del rettangolo in centimetri quadri.

Per rendere il programma più generale, si deve permettere a chi lo sta utilizzando di immettere i valori della base e dell'altezza; in questo modo l'algoritmo calcolerà l'area di un qualsiasi rettangolo.

scanf("%d",&base);

L'esecuzione di questa istruzione fa sì che il sistema attenda l'immissione di un dato da parte dell'utente.

Analogamente a quello che accadeva in printf, %d indica che si tratta di un valore intero in formato decimale, tale valore verrà poi assegnato alla variabile base .

Si presti attenzione al fatto che in una istruzione scanf il simbolo & (e commerciale, ampersand) deve precedere immediatamente il nome della variabile; &base sta ad indicare l'indirizzo di memoria in cui si trova la variabile base. È infatti noto che le locazioni di memoria in cui sono conservati i dati, sono distinguibili una dall’altra mediante un indirizzo. Il nome della variabile è una etichetta che viene assegnata, per nostra comodità, ad una o più locazioni di memoria consecutive. L'istruzione scanf("%d",&base);può allora essere così interpretata: leggi un dato intero e collocalo nella posizione di memoria il cui indirizzo è &base (praticamente l’indirizzo corrispondente alla variabile base).

Durante l'esecuzione di un programma può essere richiesta all'utente l'immissione di più informazioni, perciò è opportuno visualizzare delle frasi esplicative; a tale scopo è opportuno fare precedere le istruzioni scanf da appropriate printf.

printf("Valore base: "); 
scanf("%d", &base);

L'argomento di printf è semplicemente una costante, quindi deve essere racchiuso tra doppi apici. Non è necessario neanche richiedere un salto a linea nuova mediante un \n, in quanto l'immissione può avvenire sulla stessa riga.

Quello che verrà visualizzato, in fase di esecuzione del programma, sarà

Valore base: _

In questo istante l'istruzione scanf attende l'immissione di un valore. Se l'utente digita 15 seguito da <Invio>.

Valore base: 15 <Invio>

questo valore verrà assegnato alla variabile base

Analogamente si può modificare il programma per l'immissione dell'altezza e, magari, aggiungere un'intestazione che spieghi all'utente cosa fa il programma, come nel listato seguente:

#include <stdio.h>

/* Calcolo area rettangolo */

main(){
  int base,altezza,area;
    
  printf("Calcolo AREA RETTANGOLO \n \n");
  printf("Valore base: "); 
  scanf("%d",&base);
  printf("Valore altezza: "); 
  scanf("%d",&altezza);
  area = base*altezza;
  printf("\nBase: %d Altezza: %d\n",base,altezza); 
  printf("Area: %d",area); 
}

L'esecuzione del programma nell'ipotesi che l'utente inserisca i valori 10 e 13 sarà:

Calcolo AREA RETTANGOLO 

Valore base: 10 <Invio> 
Valore altezza: 13 <Invio> 

Base: 10 Altezza: 13 
Area: 130

Notare l’uso del newline per controllare il modo in cui il programma visualizzerà i suoi risultati. I due \n della prima printf, per esempio, servono: il primo per passare ad una nuova linea, il secondo per lasciare una linea vuota.

Con una sola istruzione di input è possibile acquisire più di un valore, per cui i due input dell’esempio precedente, avrebbero potuto essere sostituiti da:

printf("Introdurre Base e Altezza separati da una virgola\n");
scanf("%d,%d",&base,&altezza);

In questo caso, quando il programma viene eseguito, alla richiesta di input si risponderà con due numeri (che saranno assegnati rispettivamente a base e ad altezza), separati da una virgola. Il motivo della presenza della virgola è dovuto alla specifica presente nella scanf: infatti ci sono due %d separati da una virgola.



Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org