#include <stdio.h> int main () { char loop='y'; while(loop != 'n') { printf("loop? "); scanf("%c", &loop); if(loop != 'y') { loop='n'; } } return 0; } If I type in 'y' he restart the while-loop but ignores the scanf the second time and end the loop after that. Can anyone help?
3 Réponses :
Assurez-vous que le code> scanaf code> rejette la nouvelle ligne. Changez-le à:
scanf(" %c", &loop); ^
@ user1069968 Cet espace fait code> scanf code> ignore tous les espaces (y compris les nouvelles lignes).
Vous avez probablement dû entrer une nouvelle ligne afin que l'entrée passe à votre programme, non? La deuxième fois que votre boucle s'exécute, il lit que le personnage de Newline, qui «attendant» soit lu et sort automatiquement la boucle ( '\ n'! = 'Y' code>). Vous pouvez définir Scanf Ignorer Whitespace en utilisant cette chaîne de format à la place:
" %c"
C'est la réponse mieux expliquée sur ce fil. Merci d'avoir sauvegarder mes devoirs de mes copines! <3
Merci @austinwitherow, je suis heureux de savoir que cela vous a été utile :)
Une solution peut être l'utilisation fflush (stdin) code> après l'instruction
scanf () code> pour effacer le tampon d'entrée. P>
fflush (stdin) code> a un comportement non défini dans la programmation C. Cela pourrait fonctionner comme prévu sur certains systèmes, mais ce n'est pas une bonne pratique en général.
@ Nisseengström merci Nisse, je suis d'accord avec votre point. Ce n'est pas une bonne pratique car nous pouvons voir ici
Fflush Stdin travaille également sur Linux mais évitez de l'utiliser son UB, en l'utilisant, vous avez perdu la portabilité.
Consultez cet article: gidnetwork.com/b-60.html
Dupliqué possible de Deuxième scanf ne fonctionne pas
Dupliqué possible de Scanf saute tous les autres en boucle en C