Jump to content

Search the Community

Showing results for tags 'ncurses'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Matemática
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 1 result

  1. É verdade que é considerado uma má prática de programação C alocar memória em uma função e desalocar em outra função? Tenho essa dúvida porque recentemente tive que fazer o uso deste recurso em um projeto que estou desenvolvendo sozinho e eu sinceramente não sei se foi uma boa abordagem ... Segue os códigos abaixo para uma análise: //trecho de código struct art_properties{ int art; int quote; int art_color; }; //trecho de código static void handler(int num){ clear(); endwin(); init_scr(); } int resize(int key){ struct sigaction new_action; struct sigaction old_action; new_action.sa_flags=0; new_action.sa_handler=handler; sigemptyset(&new_action.sa_mask); sigaction(SIGWINCH, &new_action, &old_action); return getmaxy(stdscr); } static size_t count_rows(const char *file_path){ size_t rows=0; FILE *file=fopen(file_path, "r"); if(file!=NULL){ while(!feof(file)){ if(fgetc(file)=='\n'){ rows++; } } fclose(file); } return rows; } struct art_properties *print_art(int y, struct art_properties *properties){ struct art_properties aux; FILE *art_file=NULL, *quote_file=NULL; size_t i=0; char row_content[1025], str_quote[1025]; const char *arts[]={"obj/arts/art_001.txt", "obj/arts/art_002.txt", "obj/arts/art_003.txt", "obj/arts/art_004.txt", "obj/arts/art_005.txt", "obj/arts/art_006.txt", "obj/arts/art_007.txt", "obj/arts/art_008.txt", "obj/arts/art_009.txt", "obj/arts/art_010.txt"}; if(properties==NULL){ srand(time(NULL)); aux.art=rand()%9; aux.art_color=rand()%7; aux.quote=1+(rand()%count_rows("obj/quotes.txt")); properties=malloc(sizeof(struct art_properties)); memcpy(properties, &aux, sizeof(struct art_properties)); }else{ memcpy(&aux, properties, sizeof(struct art_properties)); } attron(COLOR_PAIR(aux.art_color) | A_BOLD); art_file=fopen(arts[aux.art], "r"); if(art_file!=NULL){ for(i=0; i<count_rows(arts[aux.art]); i++){ fgets(row_content, 1025, art_file); mvprintw(y+i, 1, "%s", row_content); } fclose(art_file); } quote_file=fopen("obj/quotes.txt", "r"); if(quote_file!=NULL){ if(aux.quote!=1){ for(int i=0; i!=aux.quote; i++){ fgets(str_quote, 1025, quote_file); } mvprintw(y+2+i, 1, "[GANADO QUOTE] - %s", str_quote); } fclose(quote_file); } attroff(COLOR_PAIR(aux.art_color) | A_BOLD); return properties; } struct art_properties *free_art(struct art_properties *ptr){ free(ptr); return NULL; } //trecho de código case '0': noecho(); do{ properties=print_art(1, properties); attron(COLOR_PAIR(YELLOW) | A_BOLD); mvprintw(y-1, 1, "[?] - Are you sure you want to quit Saddler [Y/n]?"); attroff(COLOR_PAIR(YELLOW) | A_BOLD); key=getch(); y=resize(key); clear(); switch(key){ case 'y': case 'Y': key='Y'; break; case 'n': case 'N': key='N'; break; default: break; } }while(key!='Y' && key!='N'); properties=free_art(properties); echo(); break; -> "funcionando" -> https://imgur.com/a/n3C8n5F ________________________________________________________________________________________________________________________________________ Dúvida: Se acima eu fiz mau uso da alocação dinâmica, qual seria uma abordagem alternativa para os códigos acima? Uma solução que não afete o objetivo secundário da função print_art()? * Objetivo secundário da função print_art() -> Mater as propriedades da arte impressa no terminal mesmo que a janela seja redimensionada. ________________________________________________________________________________________________________________________________________ Peço desculpas a todos os membros desta comunidade por não postar todo o projeto, mas é que ele ainda não está 100% finalizado e eu também não quero ser zuado por outros programadores mais experiêntes por postar "gambiarra" de 3000 linhas cheia de bugs.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.