Ana Silva Posted June 17, 2021 at 06:09 PM Report Share #622670 Posted June 17, 2021 at 06:09 PM Oi pessoal! Será que alguem pode me dizer como posso colocar o ficheiro binario com o nome da data atual e hora? O meu codigo está assim: #include <stdio.h> #include <time.h> struct dados_cliente{ char nome[10]; float valor; }; typedef struct dados_cliente dados; int escrever_ficheiro() { time_t ddh; time(&ddh); char nome = ctime(&ddh); dados dados_cliente; printf("Insira nome cliente:"); scanf("%s",dados_cliente.nome); printf("valor:"); scanf("%.2f", dados_cliente.valor); FILE* dados; dados= fopen(nome+".dat", "ab"); fprintf(dados, "%s %s %.2f", ctime(&ddh), dados_cliente.nome, dados_cliente.valor); fclose(dados); } int main() { time_t ddh; time(&ddh); escrever_ficheiro(); return 0; } Agradeço desde já! Link to comment Share on other sites More sharing options...
Solution rbsrbs_dev Posted June 18, 2021 at 12:40 AM Solution Report Share #622677 Posted June 18, 2021 at 12:40 AM Olá Ana, O ctime retorna um ponteiro para uma string static, nome precisa de ser char *. Mas aconselho-te já a evitares usar o ctime neste exemplo: Não tens controlo do formato que é sempre: "Www Mmm dd hh:mm:ss yyyy\n" Os carateres ':' e '\n' são proibidos em filenames em windows (':' em mac), mas mesmo em linux que suporta ambos, é mau gosto usares o '\n'. Aconselho-te vivamente a usares strftime, por poderes controlar o formato que melhor desejares. Tens aqui um exemplo de como obter a mesma informação com esta função: time_t ddh = time(NULL); struct tm * tm = localtime(&ddh); char nome[64]; strftime(nome, 64 - 1, "%a %b %e %H.%M.%S %Y", tm); ______________ > scanf("%s",dados_cliente.nome); Deves ter cuidado com buffer overflows, especialmente com buffers tão pequeninos. Em vez de "%s", podes usar "%9[^ \n]". Mas de preferência usa fgets. > scanf("%.2f", dados_cliente.valor); Não podes usar especificador de precisão no scanf. E falta-te o & no argumento. > dados= fopen(nome+".dat", "ab"); Em C não podes concatenar strings com o operador +. Tens que usar strcat por exemplo. E caso queiras continuar a usar o ctime, não podes concatenar para dentro de `nome` porque a memoria dessa string não te pertence. Terás que fazer strcpy para um buffer teu e só depois strcat(buf, ".dat"); Abrires em modo append também é um pouco inesperado já que é um bocado dificil existir um ficheiro com a data atual, a não ser que estejas a trabalhar com timings críticos 😄 > fprintf(dados, ... O fprintf está pensado para ser usado para ficheiros de texto, não binários. A não ser que saibas exatamente o que estás a fazer, deves usar fwrite para escrever para ficheiros binários. 2 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