Ne peut pas comprendre comment utiliser getchar(); en C
#include <stdio.h>
int main(void)
{
char F,C;
printf("Do you have a Fever? y/n\n");
F = getchar();
printf("Do you have a runny nose or cough? y/n\n");
C = getchar();
printf("Here are the results you input:\n");
printf("Do you have a fever?");
putchar(F);
printf("\nDo you have a runny nose or cough?");
putchar(C);
return 0;
}
Le code intrants résultats de la première getchar();
et puis quitte sans attendre pour plus d'entrée. Pourquoi est-ce?
getchar()
retourne un int
, pas un char
. Lire sa documentation (man getchar
ou l'équivalent) de voir pourquoi.Bienvenue à Débordement de Pile! Contrairement à certains autres forums sur Internet, vous savez peut-être, de Débordement de Pile n'est pas un site de discussion, ni est-il de l'aide aux devoirs site. C'est un questionetréponse site. Les utilisateurs tels que vous-même poser des questions et à d'autres utilisateurs tentent d'y répondre. Quelle est votre question?
OriginalL'auteur user2824931 | 2013-09-27
Vous devez vous connecter pour publier un commentaire.
Utiliser un
while
boucle après chaquegetchar()
si vous voulez traiter seul caractèreNotez que vous aurez envie de mettre la boucle while après vous utilisez F et C, ou ils vont être réaffectés à d'autres caractères, ils mangent dans les boucles. (Je sais que c'est évident pour vous, les experts, mais l'ajout de la clarification pour les n00bs comme moi.)
Utiliser une variable autre que
C
ouF
dans lewhile
boucles. Et, de préférence, le facteur de la boucle dans une fonction.À l'aide de
&&
plutôt que&
est plus idiomatique ici.OriginalL'auteur haccks
D'abord,
getchar()
retourne unint
, pas unchar
. Il en est ainsi, il peut renvoyer n'importe quel caractère valide (comme valeur 0..255 pour les systèmes où la CHAR_BIT est 8) et une autre valeur (généralement -1) comme des expressions du FOLKLORE.Deuxième, lorsque les utilisateurs de type de réponse, l'information que contient le caractère (O ou N, vous l'espère) plus un retour à la ligne. Il pourrait y avoir des espaces de début; il pourrait être à la traîne d'ordures.
Donc, votre F a probablement le premier caractère; le C lit le retour à la ligne, pas d'attente pour plus d'entrée.
Si vous voulez lire des lignes et des processus, chacune à son tour, utiliser
fgets()
pour lire la ligne etsscanf()
pour analyser le résultat. Ou utiliser une fonction pour encapsuler un traitement similaire, comme leget_answer()
fonction ci-dessous.Noter que les retours à la ligne à la fin de sorties, en général. Vous pourriez omettre à partir de l'invite de messages, de sorte que l'entrée s'affiche sur la même ligne que l'invite dans une session interactive.
Le code d'appel n'a pas vraiment gérer EOF correctement — où l'utilisation de déclencheurs EOF état (en tapant ctrl + D par exemple) avant d'entrer toutes les données. Le code de la
get_answer()
est OK; le code dansmain()
doit tester un rendement nul.OriginalL'auteur Jonathan Leffler
C'est parce que lorsque vous appuyez sur Entrée, après la réponse à la première question, la touche entrée est stockée dans la variable suivante C.
Pour le corriger, il suffit d'écrire un autre getchar de manger jusqu'à l'extra Entrée.
Il convient de :-
OriginalL'auteur Abhishek
Lorsque vous entrez un caractère ,il est stocké dans F,alors lorsque vous appuyez sur entrée,il est stocké dans le buffer stdin et lors de la prochaine getchar() vient de la lecture de l'entrée de la stdin tampon ,pour cela, utiliser fflush(stdin) avant chaque getchar() que vous utilisez.
OriginalL'auteur arvind