Oui/Non boucle en C
Je ne comprends pas pourquoi ce Oui/Pas de boucle ne fonctionne pas. Toutes les suggestions? Compte tenu de l'entrée est "Y". J'ai juste envie de courir la boucle, puis demander l'Y ou N de nouveau. Si O, imprimer succès, si N, imprimer un bon bye déclaration. Quelle est la raison?
int main(){
char answer;
printf("\nWould you like to play? Enter Y or N: \n", answer);
scanf("%c", &answer);
printf("\n answer is %c");
while (answer == 'Y'){
printf("Success!");
printf("\nDo you want to play again? Y or N: \n");
scanf("%c", &answer);
}
printf("GoodBye!");
return 0;
}
- ce qui se passe lorsque vous l'exécutez?
- vous savez, quand on vous pose la question, vous devez taper: Y<Enter> il ne fonctionne pas sur pression de touche
- Je vais ajouter "pas de travail" signifie qu'il exécute l'ensemble du programme et des tirages au revoir, sans me donner la chance de répondre "Y" ou "N" de nouveau et d'exécuter la boucle à nouveau.
- Je na sais tht
- pouvez-vous expliquer?
- sa lecture d'un flux
- type AA<ENTER>, et il fera ce que vous attendez
- (Pas lié à votre question) Fixer votre 2ème
printf()
. Là, vous vous attendez à un char avec "%c", mais le paramètreanswer
est manquant. - aussi votre frist printf a répondre en tant que paramètre, mais vous ne l'utilisez pas, donc l'enlever
- Vous devriez vraiment vérifier que
scanf()
est de retourner quelque chose. Si l'utilisateur tape des expressions du FOLKLORE, votre programme ne sera probablement pas arrêter (une fois que vous avez résolu le problème de ne pas lire/ignorer les retours à la ligne et d'autres de l'espace blanc. - que suis-je censé faire de "incompatible déclaration implicite de la fonction intégrée ‘printf’"?
Vous devez vous connecter pour publier un commentaire.
fixe les différentes questions
Modifier la deuxième
scanf
à:Le problème est, quand vous tapez Y et appuyez sur ENTRÉE, la nouvelle ligne est encore dans la mémoire tampon d'entrée, l'ajout d'un espace avant
%c
pourrait consommer.%
?scanf
à tous, l'utilisationfgets
pour obtenir l'ensemble de la ligne etsscanf
pour obtenir le contenu.sscanf
pour obtenir le seul char. Le problème potentiel descanf
est, l'utilisateur ne peut pas saisie ce que vous attendez de lui à l'entrée, ce qui peut causer des problèmes.Vous pouvez réduire la répétition dans votre code un peu, et vérifiez le résultat de
scanf()
(comme vous) en écrivant:La première
printf()
perdu le solde non utilisé argumentanswer
; la deuxièmeprintf()
recueilli le deuxième argument,answer
. Sauf pour les invites, il est généralement préférable à la fin de l'impression des opérations avec un saut de ligne (plutôt que d'utiliser une nouvelle ligne au départ). Les invites seront généralement rincé par la bibliothèque C avant l'entrée destdin
lecture, de sorte que vous n'avez pas besoin de la nouvelle ligne à la fin de ceux-ci.Depuis
printf()
renvoie le nombre de caractères imprimés, vous pouvez l'utiliser dans des conditions trop:Toujours, cela fait écho à la réponse, même si la réponse n'a pas été
Y
et la boucle s'arrête.