Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boas Pessoal!
Já faz algum tempo que eu vejo pessoas postando códigos sempre com os mesmos errinhos, que acabam por virar vícios lá na frente.
Claro que é a maneira mais fácil de resolver a maioria dos problemas "chatos" que encontramos quando estamos programando em C/C++.
Mas não é a forma mais confiável, não é portável e ainda é deselegante.
Para já, o campeão, é o famoso std::system("pause").
Antes de mais, usem o Code::Blocks, não é preciso usar system("pause") para ver o resultado do seu programa!
O Problema...
system("pause");
Motivo
Eu imagino que é para conseguir ler o resultado do código, ou falar para o usuário: "Pressione qualquer tecla para continuar."
(Não consigo pensar em outros motivos...)
Como contornar?
Eu espero que vocês conheçam a função scanf().
Se vocês conhecem o nosso amigo scanf, então sabem que ele lê uma string que segue uma formatação.
Então chega de "blá blá blá", e vamos ao que interessa!
O uso do operador, " * " (supressão), na string de formatação, diz para o scanf ler e descartar qualquer coisa.
Como funciona?
int numero;
printf("Digite dois números separados por um espaço: ");
scanf("%*d %d", &numero);
O código acima pegará apenas o segundo número digitado, pois nós falamos para o scanf ler e descartar o primeiro.
Nós podemos fazer isso para qualquer tipo de dados.
Vamos então pedir ao scanf ler e descartar um caractére, uma quebra de linha ('\n').
//... tooooodo o seu código aqui
printf("Pressione enter para continuar");
scanf("%*c");Aproveitando a onda do scanf, vamos a um outro problema, que tem uma solução muuuuito parecida.
O Problema...
Sujeira no buffer de entrada, limpa com fflush(stdin)
Motivo
Essa é fácil, ninguém quer um código maluco, com '\n' de sobra em todo o lado.
Você nunca passou por esse problema??
Do it yourself! :P
int main()
{
char cont='s';
while(cont == 's')
{
printf("Deseja continuar? (s/n): ");
scanf("%c", &cont);
}
return 0;O que aconteceu aqui foi que quando digitamos 's' e apertamos enter, a string enviada foi "s\n", mas o scanf só leu o 's' e deixou o '\n' no buffer de entrada padrão (stdin), no próximo loop esse '\n' será lido automaticamente e vai sair do loop.
Como contornar?
Por que não devemos usar fflush(stdin) se ele "funciona" direito??
Na documentação da função está escrito: "effect undefined for input streams".
Se nem eles (que escreveram a função) sabem o que acontece, nós, simples mortais ^_^, muito menos!
Para resolver o problema, vamos de novo usar o operador de supressão do scanf.
e vamos falar para ele: "Hey, leia tuudo mas descarte o último caractére" (o último caractére sempre será um '\n').
Usando o mesmo código que gerou o problema:
int main()
{
char cont='s';
while(cont == 's')
{
printf("Deseja continuar? (s/n): ");
scanf("%c%*c", &cont); //note a mudança aqui!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
return 0;
}Espero que tenha sanado algumas dúvidas dos iniciantes!
:lol:
Se gostarem eu fixo o tópico.
Até mais!
http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif
Carregando comentários...