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
nimish642 4 août 2017 à 17:12

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

2
Some programmer dude 4 août 2017 à 14:15

Avec %d, scanf recherche un nombre et ignore les espaces mais avec %c l'espace avant q n'est pas ignoré.

1
MrPromethee 4 août 2017 à 14:15