2017-07-11 12 views
0

J'ai essayé de lancer le programme suivant:scanf est sauté dans C

int main(){ 
    char a; 
    char b; 
    char c; 

    printf("\nenter a: "); 
    scanf("%c", &a); 

    printf("\nenter b: "); 
    scanf("%c", &b); 

    printf("\nenter c: "); 
    scanf("%c", &c); 

    return 0; 

} 

sur l'exécution du programme, il vous invite à entrer une valeur pour un. Une fois cela fait, vous êtes invité à entrer une valeur pour b, mais vous n'êtes pas autorisé à entrer une valeur car le programme ignore l'analyse et vous invite à entrer une valeur pour c qui n'est pas ignorée. Je peux initialiser a et c, mais pas b. et je n'ai aucune idée pourquoi. J'ai lu quelque part que l'utilisation de% [^ \ n] dans le scanf, mais j'ai essayé de l'utiliser et je ne pense pas que je l'ai utilisé correctement, car il ne fonctionnait toujours pas.

c'est la sortie (avec quelques exemples d'entrée):

enter a: 1 

enter b: 
enter c: 1 

process returned 0 (0x0) 

Répondre

0

Au lieu de "%c", utilisez " %c".

Sans l'espace, scanf n'oublie pas les espaces blancs lorsque le spécificateur de format est %c. C'est d'abord source de confusion car il sautera des espaces blancs pour les autres formats de type, tels que %d, %f, %s, etc.

0

Lorsque vous appuyez sur entrer, qui ajoute un caractère à la file d'attente d'entrée, qui est ensuite lu dans b.

Vous pouvez lire explicitement un caractère pour l'ignorer, ou vous pouvez utiliser (pour une alternative) %1s pour lire une chaîne de caractères (qui ignorera l'espace blanc, y compris le caractère de nouvelle ligne entré lorsque vous appuyez sur entrer.

0

'\n' devient l'entrée de la variable b après avoir appuyé sur enter. donc prendre soin de cela, utilisez getchar() qui prendra soin de '\n'.

int main(){ 
    char a; 
    char b; 
    char c; 

    printf("\nenter a: "); 
    scanf("%c", &a); 
    getchar();  

    printf("\nenter b: "); 
    scanf("%c", &b); 
    getchar(); 

    printf("\nenter c: "); 
    scanf("%c", &c); 

    return 0; 

}