Enrere Mòdul 1
Fonaments de Programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis

 
Una conversa en C

L'objectiu d'aquesta pràctica és fer servir les funcions d'entrada i sortida de C: printf() i scanf(). També  es començarà amb l'ús de variables.

 

Desenvolupament de la pràctica

Creeu un nou arxiu C anomenat m1p02.c i escriviu a la finestra d'edició el següent codi:

//m1p02.c - Una conversa en C -

#include <stdio.h> //printf i scanf

void NetejaBuffer(){ while(getchar() != '\n'); }

int main(){

  char nom[30];
  int edat;

  printf("Si us plau, escriviu el vostre nom\n");
  scanf("%s",nom);
  printf("Ara podeu escriure la vostra edat\n");
  NetejaBuffer();
  scanf("%d",&edat);
 
printf("Molt bé %s, vosté té %d anys\n",nom, edat);

return 0;

}
 

Captura de l'execució del programa.

 

Per compilar i muntar el programa prem la tecla F11 o bé selecciona l'opció Munta del menú principal d'Anjuta. En la finestra inferior de la pantalla el compilador us mostrarà els errors que ha trobat o en cas contrari posarà:

                     gcc  "m1p02.c" -o "m1p02"

                     completat correctament.

Si teniu errors, marcarà la línia i l'error. Cal corregir-los i tornar a fer l'anterior procés.

Explicació del programa

En primer lloc es pot observar que en aquesta pràctica s'ha fet servir l'altre tipus de comentaris:

//m1p02.c - Una conversa en C -

Quan es posen els símbols //, tot el que hi ha a continuació i fins al final de la línia és ignorat pel compilador.

La segona línia:

#include <stdio.h> // printf i scanf

informa al compilador que afegeixi les definicions de les funcions que es troben a l'arxiu capçalera stdio.h. En aquest cas, aquesta línia és necessària ja que farem servir les funcions printf() i scanf(). El comentari explica aquesta circumstància.

La tercera línia:

void NetejaBuffer(){ while(getchar() != '\n'); }
 

aquesta funció evitarà que el programa es salti la instrucció   scanf("%d",&edat);
 

Amb la línia:

int main(){

comença la funció principal, que en aquest cas, com a la pràctica anterior, retorna un zero.

Es declaren dues variables,

char nom[30];

int edat;

una variable preparada per guardar una cadena de caràcters de fins a 30 caràcters, anomenada nom, i una variable entera anomenada edat. En C és obligatori declarar totes les variables abans d'usar-les. Aquesta declaració serveix perquè es reservi la memòria necessària per al seu emmagatzematge.

En la següent part del codi:

printf("Si us plau, escriviu el vostre nom\n");

scanf("%s",nom);

printf("Ara podeu escriure la vostra edat\n");

NetejaBuffer();
scanf("%d,&edat);

la primera línia fa que s'imprimeixi a la pantalla el text de l'argument de printf() i fa que el cursor vagi a la línia següent. En aquest moment, l'execució del programa s'atura esperant que l'usuari introdueixi una cadena de caràcters. La funció scanf() s'encarrega de llegir el contingut de la cadena introduïda per teclat i és emmagatzemada en la variable nom. %s és el codi de tipus corresponent a les cadenes de caràcters. Pel fet que el nombre no és exactament una variable sinó una cadena de caràcters (un vector o array de caràcters) no s'ha de posar & davant del nom en la funció scanf(). Veurem més endavant que, normalment, el segon argument i següents d'aquesta funció és el nom d'una variable precedida pel caràcter &. L'explicació d'això serà tractat en profunditat més endavant.

Després d'imprimir el text de l'argument de printf() de la tercera línia,  el programa crida a la funció NetejaBuffer() per tal de netejar el buffer del teclat i permetre l'execució de la següent instrucció. En la cinquena sentencia es torna a aturar i scanf() espera que s'introdueixi un enter amb el teclat. Aquest enter serà emmagatzemat en la variable entera edat. En aquest cas, sí és obligatori posar & davant del nom de variable edat.

La línia:

printf("Molt bé %s, vosté té %d anys\n",nom, edat);

il·lustra l'ús de printf() amb més d'un argument. Fixeu-vos que en el primer argument hi ha dos codis de tipus, un del tipus de cadena de caràcters (%s) i un altre del tipus nombre enter (%d). Els dos arguments que segueixen al primer corresponen exactament a dues variables dels tipus dels codis abans esmentats. En la funció printf() no s'ha de posar & davant del nom de les variables.

A l'executar el programa es pot observar que els caràcters especials, com les vocals accentuades, s'imprimeixen bé a la pantalla.