Question

Je suis confus au sujet du rôle de getchar() dans le code suivant. Je veux dire que je sais que ça me aider à voir la fenêtre de sortie qui ne sera fermé lorsque je presse le Entrée touche.

getchar() attend essentiellement pour moi d'appuyer sur Entrée, puis lit un seul caractère.

Qu'est-ce que le caractère unique de cette fonction est en train de lire? Je n'appuie sur une touche du clavier pour à lire.

Maintenant, quand il ne rien lire, pourquoi faut-il pas donner une erreur disant « hey, vous ne me saisir quoi que ce soit pour faire la lecture »?

#include <stdio.h>

int main()
{
    printf( "blah \n" );
    getchar();
    return 0;
}
Était-ce utile?

La solution

La fonction getchar() simplement attendre jusqu'à ce qu'il reçoive un caractère, tenant le programme jusqu'à ce qu'il fait.

Un personnage est envoyé lorsque vous appuyez sur la touche Entrée; sous un système d'exploitation Windows, il envoie un retour chariot (CR) et une ligne d'alimentation (LF).

Voir ce poste de CodingHorror pour explication bien mis.

(... l'explication de la partie CR + LF, pas la partie de blocage getchar())

Autres conseils

C'est parce que getchar () est blocage fonction.

Vous devriez lire sur fonctions de blocage , qui font essentiellement le processus attendre pour quelque chose se produise.

La mise en œuvre de cette en attente comportement dépend de la fonction, mais en général il est une boucle qui attend un événement se produise.

Pour le cas de la fonction getchar(), cela est probablement mis en œuvre comme une boucle qui lit constamment un fichier (stdin pour ce cas) et vérifie météo le fichier est modifié. Si le fichier est modifié, la boucle se comporte en faisant autre chose.

Essayez ceci:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char ch;

    printf("I'm now going to block until you press something and then return... ");

    ch = getchar();

    if (ch >= 0)
       printf("\nYou pressed %c\n", ch);
    else
       printf("\nAliens have taken over standard input! Run!\n");

    return 0;
}

getchar() fera de votre programme pour aller dormir jusqu'à ce qu'un clavier (ou tout ce qui est attaché à stdin) d'interruption est reçu. Cela signifie qu'il bloque, pas de code supplémentaire exécutera jusqu'au retour de la getchar().

Il est très, très utile pour regarder le valeur de retour d'une fonction afin de le comprendre.

Toute fonction peut bloquer, à moins qu'il fournit un mécanisme pour empêcher le blocage. Par exemple, open() permet un drapeau O_NONBLOCK qui est utile pour ouvrir lent à répondre des périphériques tels que les modems. En bref, si elle est entrée à partir d'un terminal ou doit attendre pour obtenir une réponse du noyau ou d'un appareil, il y a une très bonne chance, il pourrait bloquer.

getchar () bloque votre exécution du programme jusqu'à ce qu'une touche est enfoncée. Donc, il n'y a pas d'erreur si aucune touche est enfoncée, getchar () attendra que cela se produise:)

Vous pouvez en savoir plus sur la façon dont se comporte getchar ici: http://www.cppreference.com/wiki/c/io/getchar ... cela devrait répondre à votre question:)

Je pense que ce que vous embrouille est que la touche Entrée est nécessaire befor le programme se poursuit. Par défaut, le terminal tampon jusqu'à ce que toutes les informations vous appuyez sur Entrée, avant même de l'envoyer au programme C.

d'ici Entrez problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top