On peut lire et écrire des données sur un flot d'octets à l'aide des
fonctions fscanf et fprintf, analogues à
scanf et printf mais prenant un premier argument
supplémentaire, qui est un flot d'octets. Le deuxième argument de ces
fonctions est une chaîne de caractères qui spécifie le format
d'écriture ou de lecture. Les arguments suivants désignent les données
lues ou écrites : ce sont toujours des pointeurs pour fscanf. À
chaque argument de données correspond un indicateur de
conversion (entre chaîne de
caractères et le
type de l'argument) commençant par un %
.
La fonction fscanf retourne le nombre de données correctement lues, ou bien EOF (qui vaut -1) si la fin du fichier est atteinte. La fonction fprintf retourne le nombre de caractères transmis (en ne comptant pas le caractère nul), ou bien EOF en cas d'échec.
Les principaux indicateurs de conversion sont %d pour lire ou écrire un entier, %lf pour lire un double, %f pour écrire un double en notation décimale, %e pour écrire un double en notation exponentielle, %c pour lire ou écrire un caractère, %s pour lire ou écrire une chaîne de caractères ; %% permet d'écrire le caractère %. L'exemple suivant permet de lire sur le flot in un entier, un double et une chaîne de caractères, et en cas de succès, retourne 3 :
int i;
double x;
char nom[50];
int n = fscanf(in, "%d%lf%s", &i, &x, nom);
Peuvent également figurer des indications supplémentaires dans le format. Par exemple, %4c permet de lire (au plus) 4 caractères quelconques, même des blancs, l'argument correspondant étant un tableau de caractères ; par contre, les autres indicateurs de conversion ignorent les blancs en lecture (espaces, tabulations, retours à la ligne). En écriture, il est d'usage d'indiquer la précision d'un nombre flottant : %.3f indique 3 chiffres après le point décimal. Par exemple, pour imprimer une valeur de à cinq décimales, sur le flot out :
printf(out, "pi = %.5f", 4 * atan(1. 0));
Pour aligner des nombres sur une page, il faudra préciser le nombre maximum de caractères qui doivent être imprimés dans une même colonne, alignés à droite : par exemple, %8d pour des entiers d'au plus 8 chiffres, ou %8.3d pour des flottants ayant 3 chiffres après le point décimal et au plus 4 chiffres avant (ce qui fait 8 caractères en tout). Si le nombre ne peut pas être imprimé avec ce nombre de caractères, il est imprimé correctement, mais l'alignement n'est pas respecté.
Ces fonctions conservent d'un appel au suivant la position courante de lecture ou d'écriture.
On notera que :
Par ailleurs, les fonctions sscanf et sprintf sont analogues à fscanf et fprintf, leur premier argument étant un tableau au lieu d'un flot d'octets.