Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. O único que while(if, for, etc) quer saber é se um valor é verdadeiro ou falso. Na programação 0 é considerado falso, e qualquer outro valor é verdadeiro... incluído números negativos. se ver algo como while( 0 == 0 ) vai dar como resultado true, porque zero é igual a zero, isso gera um true(resultado diferente de zero). Como já lhe explicou Lucca, por enquanto x não valer 0 isso continuará rodando.
  2. acho que sim.... eu aprendi C e C++ >_< adicionado 1 minuto depois A forma mais fácil de aprender é programando tipo mão na massa. Ponha em pratica tudo o que for aprendendo.
  3. não está permitido fazer os trabalhos de outros(regras do forum), somente tirar duvidas concretas. Mostre o que leva feito e comente aquelas partes que tiver maior duvida.
  4. É simples... você n pode compilar com o compilador que traz codeblocks por default porque o tipo de compilador é de 64 bits e allegro 4.4.2 é de 32 bits. Solução... 1º buscar allegro 4.4.2 compilada para 64 bits 2º usar um compilador de 32 bits... é dizer, você precisa instalar um compilador de 32bits nesse codeblocks, ent4ao poderia compilar. 3º Usar alguma biblioteca mais atualizada como sfml que ja é orientada a objetos(Perfeito para C++). adicionado 1 minuto depois O unico compilador que encontrei que funciona com essa versão de allegro é esse->https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/8.1.0/threads-posix/sjlj/i686-8.1.0-release-posix-sjlj-rt_v6-rev0.7z/download adicionado 12 minutos depois também encontrei algo sobre um "switch" que em teoria permite um compilador x64 e x86 compilar aplicações de 32 bits. Tal switch é o -m32 que tem que ser inserido em "Other compiler options". porém não consegui fazer funcionar, se alguem souber que ponha aqui.
  5. isso ta acontecendo porque seu codeblocks literalmente não enxerga o tal arquivo. você precisa declarar a pasta chamad include que ta dentro do allegro que você baixou no path do sistema, porque nessa pasta esta o allegro.h. adicionado 0 minutos depois ou indicar para o codeblocks onde estão a tal allegro adicionado 0 minutos depois Que tutorial você ta seguindo?
  6. Como seu exemplo era um jogo, saiba que para jogos não se usa fgets, suheush Sim é possivel fazer isso, não com fgets claro... (Ou sim?>_< Quem sabe). É só por um getch dentro de um um if com a função kbhit() como parâmetro. Se não aporrear a tecla passa batido. Ainda quer o exemplo? hsuehsuheush adicionado 1 minuto depois Ja tive metido muito nisso de joguinhos de console shuehsuehu
  7. você leu o que o isrnick falou? você fechou o arquivo q #include <stdio.h> #include <stdlib.h> #define TAM 2 typedef struct Dados { int idade; char nome[50]; char rua[30]; }Dados; int main() { //Abrimos arquivo modo escritura(arraza com arquivos anteriores) FILE *f = fopen ( "arquivo.txt", "w" ); if( f == NULL ){ perror("Erro ao tentar abrir arquivo.txt em modo leitura extendida\nMotivo" ); getchar();//pausa exit(-1); } Dados lista[TAM]; for ( int i = 0; i < TAM; i++ ) { printf ( "idade %d:", i+1 ); scanf ( "%d", &lista[i].idade ); } fwrite ( lista, sizeof ( Dados ), 2, f ); fclose ( f ); //Fechou!!! //abriu em modo leitura(Inicio do arquivo) f = fopen ( "arquivo.txt", "r" ); if( f == NULL ){ perror("Erro ao tentar abrir arquivo.txt em modo leitura extendida\nMotivo" ); getchar();//pausa exit(-1); } Dados d; //Lendo primeiro dado printf ( "Ver Idade 1:\n" ); fread ( &d, sizeof ( Dados ), 1, f ); printf ( "%d\n", d.idade ); //Lendo segundo dado printf ( "Ver Idade 2:\n" ); fread ( &d, sizeof ( Dados ), 1, f ); printf ( "%d\n", d.idade ); fclose ( f ); } uando fez fclose(f);. Tem que abrir ele
  8. Perdoe mas realmente já estou irritado. Porque aqui não existe MULTI-THREAD, mas você se empenha em por travas. E como quer chamar? Conforme wikipedia, definição de buffer é: Buffer (ciência da computação) - Uma região de memória temporária utilizada para escrita e leitura de dados; Qual problema há em chama-lo de buffer? Mas terá a mais adequada.... e não acredito que seja nem fgets nem getc. Em todos os casos e em todas as soluções o enter vai entrar no buffer. Se eu não posso propor nenhuma solução você também n pode. você explica as coisas desde um ponto de vista mais tecnico. Talvez dado a que você está acostumado em ver certos tipos de problemas a diário você tenha soluções muito mais "hardcores". Mas o que você não pode fazer é chegar em um post de um estudante iniciante e queimar a cabeça dele com threads etc, isso está fora de contesto, não vai ajudar em nada. Os threads certamente o aluno vai aprender dentro de 3 ou mais anos suheuheus. Acho que aqui, todos os mais veteranos sabemos que não devemos usar um simples scanf como entrada. Porque se um usuário pode destruir um programa o fará... e vai faze-lo logo de entrada. E se um usuario destruir seu programa, você ainda vai ter que agrader...tipo: Cliente: O programa fez boom! Programador: Obrigado por me mostrar que sou um péssimo programador, obrigado por me ensinar que tenho que fazer as coisas direito.XDD A resposta correta para uma entrada impecável é um conjunto de soluções... especificares, valor de retorno do scanf, validação de dados, etc. Uma coisa é certa... admiro sua paciência. Se você fosse meu professor eu ia te encher o saco o dia todo shuehseuhsuh Eu termino aqui... não vou debater mais nada, porque esse tema já faz tempo que deixou de ser útil para o usuário. Ainda to esperando o tal exemplo do PeekConsoleInput(). Esse sim me interessa ver. Obrigado pela paciência e seu tempo. Em outros tópicos continuaremos com as guerras. sheusheu
  9. Não se vai aprender muito mais sheuhseuh porque o tema vai parar longe ainda ja vai ver shuesueh adicionado 2 minutos depois Então ganha o arf... acho que ele sempre tem razão. Claro que conseguimos... Absolutamente todos aqui conseguimos. E você também vai conseguir
  10. Arfnet, conforme sua grande experiência... Qual a solução mais adequada ao problema do buffer??? Oh gran arf! Responda só isso. Quero ver... Não! Acho que a essa altura todos queremos ver sua solução perfeita para o tema do LIXO no buffer de entrada. E deixa de baboseiras como consumiu o buffer, multi-thread, e outras mil, que vamos subindo o índice a cada momento.
  11. ? Fico em dúvida se está falando sério. Chamar uma variável local de buffer e usar scanf() para ler dela não mostra nada. você ta de sacanagem né? Não mostra o que vei...? É que acaso tem que mostrar algo? Funciona, é brilhante pela simplicidade. Por muito que entre o enter este buffer não da erros, é funcional, por muito que que a você não lhe agrade ta aí mais uma forma de ler desde o buffer. Mas para que preciso disso??? Ja não viu o 10, não ficou satisfeito???? Que precisa mais?? WTF Do que você ta falando vei??? Que single-thread?? Ralmente n lhe entendo? Faz tempo que conversa ta se distanciando do tema atual. Folclórico? você sim ta fazendo um folclore aqui... Para você só o que você posta tem valor, não enxerga outras soluções, somente a sua. E de fato ainda deu uma solução(Queria verlaXD), só se enfoca sobre se eu entendi o que você escreve, e isso que já lhe respondi 500 vezes. E que importa?? Não... não tem o mesmo problema... funciona perfeitamente, e você sabe. É uma de tantas mais que existe, toma ou deixa. Vei... vai catar coquinho com os multi-thread. Onde você ta vendo multi-thread aqui? É vontade de causar polêmica n é? Testando...? Ou testudo?
  12. Sim entendi... E você...? Entendeu que funciona também o fgets+sscanf? Acho que não preciso explicar a diferença entre ler desde stdin e ler desde string. Não? porque sei você sabe tudo isso, e por isso sabe que funciona também adicionado 30 minutos depois Vou lhe mostrar o que ta no buffer sem usar essa função peek //fgets+sscanf #include <stdio.h> int main(){ char buffer[100]={0}; //Inicializamos todas as casinhas com um valor qualquer-99 por exemplo for ( int i=0; i<100; i++) { buffer[i] = -1; } //lendo sem erros fgets(buffer,100,stdin); //Mostrando para arfneto onde ta o enter for ( int i=0; i<20; i++) { printf("posicao:%d->%d", i, buffer[i]); if ( buffer[i] == 10 ){ puts("<-Aqui ta seu <ENTER>XD De fato n usei \\n nesta linha e saltou"); }else{ putchar(10);//<-10 >_< } } return 0; } adicionado 31 minutos depois Ainda acha que n4ao entendi?
  13. Acho que você ainda n entendeu... A definição de lixo você pode ver aqui->https://pt.wiktionary.org/wiki/lixo Mas o ponto mais importante é "coisas inúteis". Em nosso caso \n ou <ENTER> como você mostra é lixo. Em C/C++ se usa analogias para muitas coisas. Quando se referi a limpar buffer você imagina uma faxineira lá, de escovinha na mão, jogando o lixo fora? Não!!!! É pura analogia arfneto. Se a analogia é "LIMPAR O BUFFER", a pergunta é "do que", o que está lá é lixo mesmo que você n goste dessa analogia. Tendeu? Sei como funciona o buffer. Acho que com o anterior deixei claro o que quero dizer com lixo né. Eu sim estou lendo. Claro que vão rodar... Por que você diz que não? adicionado 4 minutos depois você quase é mais velho que a linguagem shuehsuhe. você nem usa C não é? certamente você usa C# shuehs. ou pode que C++
  14. entendi... Pera ai que vou fazer um test adicionado 15 minutos depois O salário você precisaria calcular ele antes de mandar para o arquivo? adicionado 16 minutos depois Por exemplo Docente recebe 2500$ por cada hora. Quando o programa pedi o salário isso deveria ser calculado antes de mandar valor algum para o arquivo. adicionado 19 minutos depois adicionado 26 minutos depois Esses dados como salário, acho que pode omitir... porque isso pode ser calculado na hora de mostrar... tipo se trabalha 8 horas por dia multiplica por 30 e dai sai salário...(falo de forma simplificada para ter uma ideia). No seu programa você pode por float horaDocente = 2500; dai na hora de imprimir pode ser salario = funcionario.horasTrabalhadas * 30; adicionado 31 minutos depois Seu programa tem alguns outros erros que acho que é critico. Por exemplo... struct Funcionario* p = ( struct Funcionario * ) malloc ( sizeof ( struct Funcionario ) ); aqui você ta reservando 1 só elemento do tamanho de 1 struct Funcionario. Se o que você quer é um array de Funcionarios o correto seria struct Funcionario* p = ( struct Funcionario * ) malloc ( sizeof ( struct Funcionario ) * X ); Onde o X é o numero de elementos do array. adicionado 36 minutos depois E outro problema maior ainda é que ao chamar a função menu ( funcionario, n ); você passa um n que nem deu valor inicial... logo escolhemos 1 no menu e repassamos esse n para IncerirFuncionario, porém sem um valor definido. Esse valor n depois é usado para int y que somado a i você usa para o limite do for mais abaixo for ( i = 0; i < y; i++ )... <---Qual o valor desse y???? adicionado 37 minutos depois realmente você precisa que seu programa leia um array??? Acho que dava para fazer sem arrays sei lá.
  15. Eu sei... mas ela não está livre de erros também. Acho que n existe nada infalivel. Sei lá... essa também era minha forma idônea, até que vi o vídeo. heheh Desde logo o que uso sempre é %*c... nunca me falhou. Acho que a melhor forma é uma combinação de coisas. Um dia eu afino heheh
  16. Sinta-se livre de modificar/melhorar como quiser... se quiser aportar algo será muito bem vindo. Talvez sejamos capazes de buscar uma solução para o maldito buffer de uma vez por todas sheusheush Eu não uso essa função.. somente queria que você observara o que passa se por essa flush sua antes do imput. Eu também uso ela algumas vezes. adicionado 1 minuto depois Eu n falei que o modo de limpar o buffer nesse video fosse o mais indicado, mas ele encontrou um caso que pode dar falho. adicionado 13 minutos depois proponho: #include <stdio.h> #include <stdarg.h> void miscanf ( const char *format, ... ) { char buffer[BUFSIZ]; fgets ( buffer, 100, stdin ); va_list args; va_start ( args, format ); vsscanf ( buffer, format, args ); va_end ( args ); } int main() { char str1[100]; char str2[100]; miscanf("%s", str1); /*Ler palavras */ miscanf("%[^\n]%*c", str2);/*Ler frases(espaços)*/ printf("%s\n", str1); printf("%s\n", str2); return 0; } adicionado 17 minutos depois função 100% livre de problemas de entrada... Se tomar o conselho de declarar char buffer[100] tal como @isrnick falou char buffer[BUFSIZ]; melhor ainda shuehseu. E se alguém quiser melhorar mais ainda seja bem vindo.
  17. Espero que sim... de toda forma indiquei uma leitura. E sempre é bom ver o ponto de vista de outros usuários. adicionado 6 minutos depois Querem saber qual é a forma mais idonea de ler o buffer para mim? #include <stdio.h> int main(){ char string[100]; char buffer[100]; fgets(buffer,100,stdin); sscanf(buffer,"%s",string); printf("Cadena: %s",string); return 0; } Um exemplo: //fgets+sscanf #include <stdio.h> int main(){ char buffer[100]; char palavra[100]; int n; char frase[100]; fgets(buffer,100,stdin); sscanf(buffer,"%s",palavra); fgets(buffer,100,stdin); sscanf(buffer,"%d", &n); fgets(buffer,100,stdin); sscanf(buffer,"%[^\n]", frase); printf("%s\n%d\n%s\n\n", palavra, n, frase); return 0; } Pode incluso ser montado alguma função com isso se quiser facilitar. adicionado 7 minutos depois Em fim... é só uma a mais de tantas hehehe.
  18. você é um cara bem estudado, entende bem das coisas, como funcionam de forma interna etc. Tem uma boa escritura, é alguém bem indicado para explicar essas coisas. Em troca eu n sirvo para isso... sou bem o contrario heheh
  19. Eu não tenho problemas com buffer... Quem precisa é @Andrah Sinta-se livre de fazer um bonito tutorial desses que você tem paciência para fazer... Ja que você entrou em tecnicismos agora n vai ficar no meio n é? adicionado 0 minutos depois Isso pode ajudar a muita gente, e de passo, talvez, seja possivel aprender algo novo hoje. adicionado 1 minuto depois E uma coisa... \n no buffer para mim é lixo, diga o que diga.
  20. até que você aprenda a limpar o buffer corretamente ponha um fflush antes de ler qualquer string adicionado 0 minutos depois fflush ( stdin ); scanf ( "%s%*c", funcionario.categoria ); adicionado 2 minutos depois Mas realmente sou totalmente contra de fflush, e nunca recomendo isso. Termine seu programa e depois tente usar qualquer outra forma... você ja viu que alguns companheiros indicaram algumas formas, e qualquer delas é melhor que fflush. Se seu professor está recomendando isso talvez não seja um bom tutor.
  21. também n aconselho muito o uso desse flush @isrnick >_<. O porque você pode ver aqui:
  22. Ainda estou dando uma olhada. adicionado 0 minutos depois mas se conseguiu limpar o buffer ao menos tomar os dados e criar o arquivo você ja deve ter conseguido

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!