paulo1205
(usa Ubuntu)
Enviado em 09/07/2018 - 13:21h
Não é ruim usar essa função. É ruim usá-la do modo como ele a usou.
Ele até dá uma explicação, mas tal explicação não é boa. Eis o que ele diz a respeito.
The next command is getchar(). This is another function call: it reads in a single character and waits for the user to hit enter before reading the character. This line is included because many compiler environments will open a new console window, run the program, and then close the window before you can see the output. This command keeps that window from closing because the program is not done yet because it waits for you to hit enter. Including that line gives you time to see the program run.
O pedaço que diz “
it reads in a single character and waits for the user to hit enter before reading the character” é incorreto, pois não é isso o que a função efetivamente faz. Do ponto de vista do C, não existem teclas, nem
Enter, nem teclado, nem terminal, e possivelmente nem mesmo usuário (no sentido dado pelo autor do texto). Para o C, o que existe é um fluxo de dados, na forma de uma cadeia de
bytes. Como esses
bytes chegaram nesse fluxo não diz respeito ao programa em C, mas sim ao ambiente de execução. A espera pela quebra de linha, venha ela da tecla
Enter ou de algum outro modo, também não é atribuição do programa C, da biblioteca de entrada e saída que ele usa ou de como a biblioteca lida com
buffers, mas também do ambiente de execução (no caso dos nossos PCs UNIX/Linux ou Windows, o sistema operacional implementa
buffers no nível do dispositivo associado ao terminal, seja ele físico ou virtual; a espera pela quebra de linha, se houver, é resolvida em nível de S.O., não de biblioteca de I/O, e muito menos em nível de linguagem).
É legítima a preocupação com características do ambiente de execução. É quase inevitável que o aluno vai tentar seus exemplos e exercícios num computador real, e a possibilidade de que um programa que executa tão rapidamente numa janela à parte que se feche antes de o resultado poder ser visto, às vezes em menos de um décimo de segundo, pode ser bastante frustrante. Mas esse cuidado pode ser tomado de uma maneira que não apresente ao aluno informações incorretas, nem o leve a poluir o código em C com artefatos de código supostamente engenhosos para contornar comportamentos do ambiente de execução — até porque cada ambiente de execução se comporta de maneira possivelmente distinta de outros ambientes, e os artefatos voltados para um tipo de ambiente podem produzir efeitos deletérios em outro ambiente.
Uma abordagem melhor possivelmente seria explicar que a interface padrão do C é através de comunicação por texto, como tal comunicação por texto se dá num computador real através de um terminal físico ou virtual, e orientar o aluno a como executar o código compilado a partir de um terminal previamente alocado ou dar orientações gerais para configurar um ambiente de desenvolvimento integrado em modo gráfico para que dispare o emulador de terminais de um modo que ele não se feche automaticamente quando o programa que executar dentro terminar. Seriam instruções pouco específicas, mas pelo menos não seriam errôneas.