July 15 2009 - April 26 2019
Showing content with the highest reputation since 12/25/13 in all areas
Novo Master - Wings
Olá iMasters, É com grande satisfação que estamos adicionando o @wings ao grupo seleto de Masters do fórum iMasters, que inclui membros que fizeram grandes feitos pelo fórum e também pessoas que são tidas como grandes referências no que fazem. Durante suas atividades no fórum iMasters @wings foi um excelente moderador da área de Segurança e Malwares desde Novembro/2009 até Setembro/2013 quando saiu a pedido por falta de tempo. Neste tempo contribuiu em aproximadamente 800 tópicos com problemas diversos dos membros nesta área. Dr. Fernando José de Paiva Coelho, nome verdadeiro de wings, Era médico e professor com especialização e pós-graduação em ortopedia e traumatologia. Faleceu de infarto do miocárdio agudo em 06/02/2014; em Miguel Pereira - RJ ; aos 52 anos de idade. Receba @wings essa justa homenagem póstuma do fórum que você ajudou a crescer também na área de Segurança e Malwares. Descrição dos grupos do Fórum iMasters: http://forum.imasters.com.br/topic/297370-grupos-de-usurios-frum-imasters/#entry1089308
Olá iMasters!!! Tive alguns desentendimentos com wings,em relação às regras do Fórum,mas sempre admirei seu profissionalismo e conhecimentos na área de sua atuação. (Segurança e Malwares) Grande perda....estou estarecido! Que Deus o tenha,em seu Reino. Adeus wings...fique na paz de Jesus!
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"); ps.: Não usem as funções da <conio.h>, essa biblioeta também não é portável e está obsoleta, é muito antiga. Para ter mais controle sobre o input/output do console, busque por nCurses (para aqueles que usam Windows, pdCurses). 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 O meu pc ficou louco???Não, fique calmo! 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; } Pois é... 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