Problème avec scanf

rosa -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

je suis débutante en C ,j'ai ecrit un petit code qui permet de répéter l'opération d'entrer un caractère.le programme s'arrete lorsque l'utilisateur entre un zéro.
voila ce que j'ai ecrit

#include <stdio.h>
int main(){
char c;
while (c != '0'){
printf("donner un caractère\n");
scanf("%c",&c);
}
}

le problème c'est que la première fois il me donne la main pour faire entrer le caractère, la deuxième fois non, et puis il me donne la main pour donner le caractère, et la troisème fois non (lorsque je dis non, c'est q'il m'affiche deux fois successive "donner un caractère" sans me laisser le temps pour faire entrer le caractère)
est ce que quelqu'un peut m'aider à resoudre ce problème?
merci d'avance

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
1) tu dois initialiser c, car tu testes c!='0' alors que c n'a pas de valeur.
une alternative serait de faire une boucle do while.

2) lorsque tu entres des caractères ils sont ajoutés les uns à la suite des autres et tu les lis un par un. Le mieux pour comprendre est d'afficher ce que tu lis.

Exemple :

#include "stdio.h"

int main()
{
    char c;
    
    do
    {
        printf("donner un caractere : ");
        scanf("%c",&c);
        printf("%d : %c\n",(int) c, c);
    }
    while (c != '0');
}

Supposons que je rentre le mot "test" d'un seul coup voici ce que ça va m'afficher :

donner un caractere : test
116 : t
donner un caractere : 
101 : e
donner un caractere : 
115 : s
donner un caractere : 
116 : t
donner un caractere : 
10 :

donner un caractere : 

Dans le cas où tu ne rentres "un seul" caractère tu appuies quand même sur la touche entrée et c'est pour ça que tu as le caractère 10 (c'est à dire le \n) qui décale tout...
0