J'essaie de comprendre comment fonctionne le tampon d'entrée. J'ai donc écrit un morceau de code:
#include<stdio.h>
int main(){
int a,b;
char c,d;
scanf("%d %d",&a,&b);
scanf("%c %c",&c,&d);
printf("%d*%d*%c*%c",a,b,c,d);
return 0;
}
Et maintenant pour l'entrée:
5 4 qw
Je m'attendais donc à ce que ma sortie soit:
5*4* *
Production:
5*4* *q
Quelqu'un peut-il m'expliquer pourquoi il ne considérait qu'un seul espace sur deux (l'un entre 5 et 4 et l'autre entre 4 et q) comme un personnage et pas les deux? Et lequel des deux espaces est imprimé en tant que caractère?
2 réponses
Si nous commençons par
scanf("%d %d",&a,&b);
Alors cela lira le 5
et le 4
, laissant le tampon d'entrée comme " qw"
.
Maintenant, quand vous le faites
scanf("%c %c",&c,&d);
Le premier "%c"
lira l'espace , tandis que l'autre lit le 'q'
, et le 'w'
sera laissé dans le tampon d'entrée.
C'est parce que le format "%c"
ne saute pas les espaces blancs. Il lira n'importe quel caractère dans le tampon d'entrée.
Si vous lisez par exemple cette scanf
(et sa famille) référence, vous verrez que le formats "%c"
, "%["
et "%n"
ne suppriment pas l'espace blanc de début
Avec %d
, scanf
recherche un nombre et ignore les espaces mais avec %c
l'espace avant q
n'est pas ignoré.
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.