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

 
Comprovació de dades

Una de les moltes funcions de les sentències condicionals és la comprovació de dades introduïdes per teclat. En aquesta pràctica aprendrem a fer la comprovació en alguns casos.

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C anomenat m3p04.c i escriviu el següent codi:

//m3p04.c - comprovació de dades -

#include <stdio.h>

#include <stdlib.h>

 

#include <ctype.h> // per tolower()

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

int main(){

  int n;
  char c;
 

  system("clear");
  printf("\nintroduïu un número senar...");
  scanf("%d",&n);
  if(n%2) printf("correcte\n");
  else printf("no és correcte\n");

  printf("\nintroduïu un número enter entre 1 i 5...");
  scanf("%d",&n);
  if(n>1&&n<5) printf("correcte\n");
  else printf("no és correcte\n");

  printf("\nintroduïu una vocal...");
  NetejaBuffer();
  c=getc(stdin);
  c=tolower(c);
  if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
    printf("correcte\n");
  else

    printf("no és correcte\n");

  printf("\npremeu la tecla ESC...\n");
  NetejaBuffer();
  c=getc(stdin);
 

  if(c==27)

     printf("correcte\n");
  else

     printf("no és correcte\n");
  return 0;
}

 

 

Captura de l'execució del programa.

 

 


Explicació del programa

La primera comprovació és si el nombre introduït és o no un nombre senar. Un nombre senar és aquell en el qual l'operació n%2 és diferent de 0, i per tant veritat.

La segona comprovació és si el número introduït es troba a l'interval (1,5). Això es comprova amb els operadors relacionals < i > i amb l'operador lògic &&.

La tercera comprovació és si el caràcter introduït és una vocal. Per tal d'incloure tant les majúscules com les minúscules es fa servir la funció tolower() que torna el caràcter en minúscules del caràcter que es posi com argument. El protocol d'aquesta funció es troba a l'arxiu de capçalera stdlib.h que s'ha d'incloure en el programa.

La quarta comprovació és si el caràcter introduït correspon a la tecla ESC, el codi ASCII de la qual és 27.

    NetejaBuffer();
 

Utilitzem aquesta funció per netejar el buffer del teclat. La anterior funció scanf("%d",&n);
llegeix la dada i deixa sense recollir el caràcter '\n' que es queda dins el buffer.La següent instrucció de lectura c=getc(stdin); és el primer caràcter que es troba, el captura i entén que s'ha finalitzat l'entrada. La funció que hem escrit  NetejaBuffer();   buida de caràcters aquest buffer i el deixa net per la següent entrada.

        c=getc(stdin);


La macro getc() implementada en la biblioteca estandar stdio.h lleigeix un caràcter, en aquest cas des de el teclat, i el retorna. Aquest caràcter és assignat a la variable c.