boucle do while (Oui/Non d'invite utilisateur
Mon programme qui trouve les facteurs premiers est tous ensemble...la seule chose que je dois faire est ce type de sortie:
Voulez-vous essayer un autre numéro? Dire Y(es) ou N(o): o
//demande pour un autre nombre (traverse de nouveau le programme)
Voulez-vous essayer un autre numéro? Dire Y(es) ou N(s): n
//Merci pour l'aide de mon programme. Au Revoir!
J'ai ma tentative à cet égard, ci-dessous...Quand j'type n il ne le bon de sortie. Mais si je tape "y", il a juste dit la même chose n t....Comment puis-je boucle l'ensemble du programme sans mettre le code pour le programme à l'intérieur de cette boucle que j'ai? Alors, quand j'appuie sur y, il traverse à nouveau le programme?
int main() {
unsigned num;
char response;
do{
printf("Please enter a positive integer greater than 1 and less than 2000: ");
scanf("%d", &num);
if (num > 1 && num < 2000){
printf("The distinctive prime facters are given below: \n");
printDistinctPrimeFactors(num);
printf("All of the prime factors are given below: \n");
printPrimeFactors(num);
}
else{
printf("Sorry that number does not fall within the given range. \n");
}
printf("Do you want to try another number? Say Y(es) or N(o): \n");
response = getchar();
getchar();
}
while(response == 'Y' || response == 'y');
printf("Thank you for using my program. Goodbye!");
return 0;
} /* main() */
Vous devez vous connecter pour publier un commentaire.
Le problème est probablement que vous obtenez quelque chose qui n'est pas
y
degetchar
et la boucle s'arrête, que la condition ne correspond pas.getchar()
peut utiliser un tampon, de sorte que lorsque vous tapez " y " et appuyez sur entrée, vous aurez char 121 (y) et 10 (entrée).Essayer la suite d'un programme et voir ce sortie:
Vous verrez quelque chose comme ceci:
Ce que vous pouvez voir, c'est que le clavier est mis en mémoire tampon et à la prochaine exécution de
getchar()
vous obtenez de la mémoire tampon de saut de ligne.MODIFIER: Ma description n'est que partiellement correcte en termes de votre problème. Vous utilisez
scanf
pour lire le numéro, vous êtes à l'essai contre. Si vous ne: nombre, entrez, y, entrez.scanf
lit le nombre, quitte le retour à la ligne à partir de votre entrée dans le tampon, leresponse = getchar();
lit le saut de ligne et magasins le retour à la ligne dansresponse
, le prochain appel àgetchar()
(à la bande de retour à la ligne que j'ai décrit ci-dessus) obtient le'y'
et votre boucle s'arrête.Vous pouvez résoudre ce problème en ayant
scanf
lire le retour à la ligne, afin de ne pas s'attarder dans la mémoire tampon:scanf("%d\n", &number);
.while
déclaration, comparer les valeurs de l'entier de valeurs ASCII pourY
ety
.Lors de la lecture de la saisie à l'aide scanf (lorsque vous entrez votre numéro de ci-dessus), l'entrée est lu après le retour de la clé est pressé, mais le retour à la ligne générée par la touche de retour n'est pas consommé par scanf.
Cela signifie que votre premier appel à getchar() sera de retour le retour à la ligne (toujours assis dans la mémoire tampon), ce qui n'est pas un "Y".
Si vous inversez vos deux appels à la fonction getchar() - où le second est celui que vous affectez à la variable, votre programme de travail.
vient de mettre
getchar()
aprèsscanf
déclaration de la vôtre, qui va manger la inutiles'\n'
de tampon...response=getchar()
est de retour restant de saut de ligne dans le tampon d'entrée de l'scanf ci-dessus.while
boucle? La récursivité n'est pas la bonne approche dans la résolution de ce problème. C'est tout ce que je voulais dire.Comme d'autres l'ont dit, il y a un '\n' dans le flux d'entrée gauche de votre appel à scanf().
Heureusement, la bibliothèque standard de la fonction fpurge(FILE *stream) efface toute entrée ou de sortie de tampon dans la filière donnée. Lorsqu'il est placé n'importe où entre vos appels à scanf() et getchar(), ce qui suit vous débarrasser stdin de tout ce qui restera dans la mémoire tampon: