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

Per afegir un nou projecte a l'espai de treball m1, podeu seleccionar File->New o bé, amb el botó dret del ratolí, fer clic damunt el nom de l'espai de treball a la finestra d'espai de treball. D'aquesta manera, apareix un menú contextual, la primera opció del qual és Add New Project to Workspace. Creeu-ne un de nou amb el nom m1p02 i afegiu-hi un arxiu de codi C/C++ anomenat m1p02.cpp (recordeu que l'extensió .cpp la posa automàticament VC++). Escriviu a la finestra d'edició el codi següent:

//m1p02.cpp: Una conversa en C 

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

void 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");
     scanf("%d",&edat);
     printf("Molt bé %s, vosté té %d anys\n",nom, edat);

}

Per crear l'arxiu m1p02.exe seleccioneu Build -> Build m1p02.exe (o bé la tecla F7). D'aquesta manera, i si no hi ha hagut errades de sintaxi, es crearà un arxiu anomenat m1p02.exe a la carpeta \...\m1p02\debug\

Executeu el programa seleccionant Build->Execute m1p02.exe (o bé les tecles Ctrl + F5). És aconsellable executar sempre els programes la primera vegada en l'entorn Visual C++ per poder depurar millor els possibles errors.

Si tot ha anat bé, ja podeu crear la versió executable optimitzada seguint els mateixos passos de la pràctica anterior.

Podeu esborrar tots els arxius del directori \...\m1p02\Release\ excepte l'arxiu m1p02.exe.

Proveu d'executar-lo dintre i fora de l'entorn Visual C++.

 

Explicació del programa

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

//m1p02.cpp: 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 hi ha a l'arxiu capçalera stdio.h. En aquest cas, aquesta línia és necessària, ja que fareu servir les funcions printf() i scanf(). El comentari explica aquesta circumstància.

Amb la línia:

void main(){

comença la funció principal, que en aquest cas, com a la pràctica anterior, no retorna cap valor.

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");

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/ària 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(). Veureu 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ò es tracta en profunditat més endavant.

Després d'imprimir el text de l'argument de printf() de la tercera línia, l'execució es torna a aturar i scanf() espera que s'introdueixi un enter amb el teclat. Aquest enter s'emmagatzema en la variable entera edat. En aquest cas, sí que é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 al 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 el 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.

En executar el programa, es pot observar que els caràcters especials, com les vocals accentuades, no s'imprimeixen bé a la pantalla. A la pràctica següent veureu com resoldre aquest problema.