Aquest post és molt bàsic però ens ensenya com llegir una variable donada per un usuari en C utilitzant la funció scanf. Amb aquesta funció podem llegir qualsevol tipus de dada, sempre que especifiquem el seu tipus correctament.
Es diu scanf
perquè escaneja segons un format. Com a primer argument rep el format (una cadena) i com a segon argument l’adreça de memòria on posarà el valor llegit.
Aquesta funció per llegir dades per teclat en C està a la llibreria stdio.h, el únic que hem de fer és incloure-la amb #include <stdio.h>
.
Com llegir variables amb scanf
Per a això primer declarem la variable, i després anomenem a la funció, passant-li la direcció de la variable usant l’operador &
. Per cert, quan llegim cadenes això no cal, passem el nom de la variable sense obtenir la seva direcció.
Llegir una variable sencera en C
És així:
See the gist on github.
el printf abans de l’scanf serveix per indicar-li a l’usuari el que ha de fer, perquè scanf pausa el programa fins que llegeix el valor. El format utilitzat és% d.
Obtenir un valor flotant per teclat
El mateix que vam fer per a un sencer, però ara amb un flotant. Queda així:
Veure the gist on github.
El format és% f. Presta atenció quan imprimim el nombre, fem servir% 0.2f perquè imprimeixi únicament 2 decimals després del punt; això és per a no mostrar el nombre en la seva màxima expressió; però si vols pots utilitzar simplement% f.
Llegir cadena amb scanf
Per a llegir una cadena en C és gairebé el mateix, però ara no passem l’adreça de memòria perquè una cadena ja és un apuntador a el primer caràcter que la conforma.
Veure the gist on github.
Nota: si us plau llegeix per què usar fgets en lloc de scanf si vols millorar la seguretat de les teves programes.
Més formats
Pots llegir variables de molts tipus; especificant el format. Dels que recordo, són:
% d per sencers declarats amb int
% s per cadenes declarades amb char*
o char cadena
% c per a caràcters declarats amb char
% f per flotants declarats amb float
% l per sencers declarats com long
% pluja per a enters que són unsigned long long
(fem servir això quan vam veure com convertir binari a decimal)