Luis Santos Posted August 16, 2021 at 01:11 PM Report Share #623173 Posted August 16, 2021 at 01:11 PM (edited) Tenho um programa para a faculdade e está a funcionar perfeitamente, o meu único problema e não sei por onde começar é como guardar as informações armazenadas ao abrir novamente o programa, é através de um ciclo em que puxo o ficheiro? Edited August 16, 2021 at 01:13 PM by Luis Santos demasiada informção do código e receio de fraude 1 Report Link to comment Share on other sites More sharing options...
maluco-123 Posted August 19, 2021 at 09:59 PM Report Share #623245 Posted August 19, 2021 at 09:59 PM Viva, Presumo que estejas a guardar com um "fwrite" ou algo do género, Para ler, é só alocar uma lista e ler com "fread" ateu o ficheiro acabar, Podes também guardar no início do ficheiro o tamanho do array (ou dos dados em geral), Novamente, presumo que seja um (ou mais) array de alguma estrutura, Boa sorte 1 Report Link to comment Share on other sites More sharing options...
M6 Posted August 20, 2021 at 10:23 AM Report Share #623260 Posted August 20, 2021 at 10:23 AM Creio que a forma mais simples no teu caso será serializar / deserializar. Basicamente escreves o conteúdo que tens em memória para um ficheiro e depois lês desse ficheiro para memória. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
rbsrbs_dev Posted August 23, 2021 at 10:43 PM Report Share #623309 Posted August 23, 2021 at 10:43 PM Olá Luis, Como os users em cima disseram corretamente, para poderes reutilizar informação entre execuções deves usar ficheiros. Tens é uma grande decisão entre usares um ficheiro binário ou ficheiro de texto. Isto vai depender um pouco dos teus requisitos se por exemplo queres poder facilmente editar a informação manualmente (ficheiro de texto) ou não. Mas no geral: ficheiro de texto dá muito mais trabalho porque requer fazer deserialização (decidires a ordem e cabeçalhos para cada unidade de informação) e depois a serialização (lexing e parsing). Ficheiro binário não tens grande parte deste trabalho caso seja possível fazeres literalmente "dump" da memória da tua informação. Para ambos os casos a rotina habitual é: o programa inicia por verificar se esse ficheiro existe. Se não existir fazes um init básico, caso exista fazes o tal upload do ficheiro para memória. No final do programa (ou por decisão do user wathever) fazes a escrita da informação para esse tal ficheiro com nome conhecido. Deixo algumas observações ao teu código (tenho notificações por email deste sub, por isso consegui ver o teu OP): O nome das macros é norma e aconselhado usar full capslock, entre várias razões é uma forma simples de identificar que aquele símbolo é algo constante/macro. O teu array global de meses só é utilizado/acedido uma única vez, por isso é aconselhado moveres para a própria função. Tens uma grande quantidade de printfs que imprimem só uma string constante do tipo "\nString exemplo". É aconselhado moveres o '\n' para o final da string. Isto é completamente implemented defined e system dependent mas tem um pouco a ver com a forma como o output é buffered e flushed. Uma outra razão que acho mais importante que é algo filosófico, tem a ver com cada linha (geralmente um printf) é responsável pela sua própria linha. Imagina por exemplo que tens um printf ao teu estilo que escreve algo tipo "\nTarefa x foi executada." e depois mais à frente é chamada uma função que imprime informação de uma estrutura do género: void print_my_struct(my_struct_t * foo) { printf("ID: %s\n", foo->id); printf("Value: %d\n", foo->value); } Esta função não tem obrigação nenhuma de saber que deveria ter imprimido um '\n' para apresentar a informação numa nova linha. Por isso é recomendado manteres o "cursor" no início de uma nova linha por default para evitares esta incerteza. Para além disto, podes passar estes printfs para puts, mas não é muito importante, o compilador trata dessa otimização. Um outro conselho é no teu switch em vez de usares os valores [1, 2, 3, 4, etc] para as tuas opções de menu, podes usar um enum para ser mais fácil ler os teus vários cases e evitares confundir-te. Por exemplo: enum menu_opcao { OPCAO_ALTERAR_CATEGORIA = 1, OPCAO_INSERIR_DESPESA, // complete me } 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now