Jump to content
Fórum Script Brasil
  • 0

Problema em salvamento em arquivos


Question

#include <stdio.h>
#include <stdlib.h>

int i = 0;
int op;
char lixo[100];
FILE *file, *fi;

struct {
    char titulo[100], descrip[200], cep[10];
    char rua[100], cidade[100], estado[50], bairro[100], num[10], nome[100];
    int status, dat, totald, totalh;
    int datai[3], dataf[3], horai[2], horaf[2];
} comp[15], aux;

void menu();
int main();

void cadastrar() {
    int diai, diaf, totald, totalh, horai, horaf, temp, temp2, temp3;
    in:
    system("cls");
    printf("                    Digite o titulo do compromisso  : ");
    scanf("%[^\n]", comp[i].titulo);
    fflush(stdin);
    printf("\n                 Coloque aqui a descricao do mesmo  : ");
    scanf("%[^\n]", comp[i].descrip);
    fflush(stdin);
    printf("\n    Por favor digite a data inicial < dd/mm/aaaa >  : ");
    scanf("%d/%d/%d", &comp[i].datai[0], &comp[i].datai[1], &comp[i].datai[2]);
    diai = comp[i].datai[0] + comp[i].datai[1] * 30 + comp[i].datai[2] * 365;
    comp[i].dat = diai;
    printf("\n      Por favor digite o horario inicial < hh:mm >  : ");
    scanf("%d:%d", &comp[i].horai[0], &comp[i].horai[1]);
    printf("\n      Por favor digite a data final < dd/mm/aaaa >  : ");
    scanf("%d/%d/%d", &comp[i].dataf[0], &comp[i].dataf[1], &comp[i].dataf[2]);
    diaf = comp[i].dataf[0] + comp[i].dataf[1] * 30 + comp[i].dataf[2] * 365;
    totald = diaf - diai;
    printf("\n        Por favor digite o horario final < hh:mm >  : ");
    scanf("%d:%d", &comp[i].horaf[0], &comp[i].horaf[1]);
    horai = comp[i].horai[0] * 60 + comp[i].horai[1];
    horaf = comp[i].horaf[0] * 60 + comp[i].horaf[1];
    fflush(stdin);
    printf("\n             Digite o nome do local do compromisso  : ");
    scanf("%[^\n]", comp[i].nome);
    fflush(stdin);
    printf("\n                    Digite o estado do compromisso  : ");
    scanf("%[^\n]", comp[i].estado);
    fflush(stdin);
    printf("\n                    Digite o cidade do compromisso  : ");
    scanf("%[^\n]", comp[i].cidade);
    fflush(stdin);
    printf("\n         Digite o cep do compromisso < _____-___ >  : ");
    scanf("%[^\n]", comp[i].cep);
    fflush(stdin);
    printf("\n                       Digite a rua do compromisso  : ");
    scanf("%[^\n]", comp[i].rua);
    fflush(stdin);
    printf("\n           Digite o numero do local do compromisso  : ");
    scanf("%[^\n]", comp[i].num);
    fflush(stdin);
    printf("\nDigite o nome bairro do compromisso (apenas o nome) : ");
    scanf("%[^\n]", comp[i].bairro);
    fflush(stdin);
    totalh = horaf - horai;
    system("cls");
    printf("\n\nA duracao do evento sera de: %d dia(s), %d hora(s) e %d minuto(s).", totald, totalh / 60, totalh % 60);
    i++;
    fi = fopen("save\\i.txt", "w");
    fprintf(fi, "%d", i);
    fclose(fi);
    int o, j;
    for (o = 0; o < i - 1; o++)
        for (j = 0; j < i - 1; j++) {
            if (comp[j].dat>comp[j + 1].dat) {
                aux = comp[j];
                comp[j] = comp[j + 1];
                comp[j + 1] = aux;
            }
        }
    printf("\n\nDeseja.\n1. Voltar ao menu\n2. Cadastrar mais compromissos.\n\n");
    scanf("%d", &op);
    fflush(stdin);
    if (op == 1)
        menu();
    if (op == 2)
        goto in;
}

void exibirmais();

void exibirmaise() {
    printf("Titulo : %s\n\nDescricao :\n%s\n\n", comp[op - 1].titulo, comp[op - 1].descrip);
    printf("O evento ocorrera no local : %s\n\n", comp[op - 1].nome);
    printf("%s, %s, CEP : %s\n\n", comp[op - 1].cidade, comp[op - 1].estado, comp[op - 1].cep);
    printf("Bairro : %s, Rua.%s - n %s\n\n", comp[op - 1].bairro, comp[op - 1].rua, comp[op - 1].num);
}
void editar() {
    int diai, horai, horaf, j, o, opi;
in:
    system("cls");
    if (i != 0) {
        printf("Qual compromisso deseja editar?\n\n");
        for (j = 0; j < i; j++) {
            printf("%d - Titulo: %s\n", j + 1, comp[j].titulo);
        }
        printf("\n");
        scanf("%d", &op);
        system("cls");
        exibirmaise();
        printf("Qual informacao deseja editar?\n\n");
        printf("1. Titulo.              8.  Estado.\n");
        printf("2. Descricao.           9.  Cidade.\n");
        printf("3. Data Inicial.        10. CEP.\n");
        printf("4. Horario Inicial.     11. Rua.\n");
        printf("5. Data Final.          12. Numero.\n");
        printf("6. Horario Final.       13. Bairro.\n");
        printf("7. Nome do local.       14. Ir para o Menu.\n\n");
        scanf("%d", &opi);
        if (opi == 1) {
            printf("                       novo titulo : ");
            scanf("%[^\n]", comp[op - 1].titulo);
            fflush(stdin);
        }
        if (opi == 2) {
            printf("\n                   Nova descricao : ");
            scanf("%[^\n]", comp[op - 1].descrip);
            fflush(stdin);
        }
        if (opi == 3) {
            printf("\nNova data inicial < dd/mm/aaaa > : ");
            scanf("%d/%d/%d", &comp[op - 1].datai[0], &comp[op - 1].datai[1], &comp[op - 1].datai[2]);
            diai = comp[op - 1].datai[0] + comp[op - 1].datai[1] * 30 + comp[op - 1].datai[2] * 365;
            comp[op - 1].dat = diai;
            for (o = 0; o < i - 1; o++)
                for (j = 0; j < i - 1; j++) {
                    if (comp[j].dat>comp[j + 1].dat) {
                        aux = comp[j];
                        comp[j] = comp[j + 1];
                        comp[j + 1] = aux;
                    }
                }
            fflush(stdin);
        }
        if (opi == 4) {
            printf("\n  Novo horario inicial < hh:mm > : ");
            scanf("%d:%d", &comp[op - 1].horai[0], &comp[op - 1].horai[1]);
            horai = comp[op - 1].horai[0] * 60 + comp[op - 1].horai[1];
            horaf = comp[op - 1].horaf[0] * 60 + comp[op - 1].horaf[1];
            comp[op - 1].totalh = horaf - horai;
            fflush(stdin);
        }
        if (opi == 5) {
            printf("\n  Nova data final < dd/mm/aaaa > : ");
            scanf("%d/%d/%d", &comp[op - 1].dataf[0], &comp[op - 1].dataf[1], &comp[op - 1].dataf[2]);
            fflush(stdin);
        }
        if (opi == 6) {
            printf("\n    Novo horario final < hh:mm > : ");
            scanf("%d:%d", &comp[op - 1].horaf[0], &comp[op - 1].horaf[1]);
            fflush(stdin);
        }
        if (opi == 7) {
            printf("\n          Novo nome para o local : ");
            scanf("%[^\n]", comp[op - 1].nome);
            fflush(stdin);
        }
        if (opi == 8) {
            printf("\n                     Novo estado : ");
            scanf("%[^\n]", comp[op - 1].estado);
            fflush(stdin);
        }
        if (opi == 9) {
            printf("\n                     Nova cidade : ");
            scanf("%[^\n]", comp[op - 1].cidade);
            fflush(stdin);
        }
        if (opi == 10) {
            printf("\n          Novo cep < _____-___ > : ");
            scanf("%[^\n]", comp[op - 1].cep);
            fflush(stdin);
        }
        if (opi == 11) {
            printf("\n                        Nova rua : ");
            scanf("%[^\n]", comp[op - 1].rua);
            fflush(stdin);
        }
        if (opi == 12) {
            printf("\n                     Novo numero : ");
            scanf("%[^\n]", comp[op - 1].num);
            fflush(stdin);
        }
        if (opi == 13) {
            printf("\n                     Novo Bairro : ");
            scanf("%[^\n]", comp[op - 1].bairro);
            fflush(stdin);
        }
        if (opi == 14) {
            fflush(stdin);
            menu();
        }
        printf("\n\nDeseja.\n1. Voltar ao menu\n2. Editar mais compromissos.\n\n");
        scanf("%d", &op);
        if (op == 1)
            menu();
        if (op == 2)
            goto in;

    }
    else {
        printf("não há compromissos marcados.\n\n1. Voltar ao menu.\n\n");
        scanf("%[^\n]", lixo);
        fflush(stdin);
        menu();
    }
}

void exibirmais() {
    system("cls");
    printf("Titulo : %s\n\nDescricao :\n%s\n\n", comp[op - 1].titulo, comp[op - 1].descrip);
    printf("Inicio : %d/%d/%d %d:%d\n", comp[op - 1].datai[0], comp[op - 1].datai[1], comp[op - 1].datai[2], comp[op - 1].horai[0], comp[op - 1].horai[1]);
    printf("Final  : %d/%d/%d %d:%d\n\n", comp[op - 1].dataf[0], comp[op - 1].dataf[1], comp[op - 1].dataf[2], comp[op - 1].horaf[0], comp[op - 1].horaf[1]);
    printf("O evento ocorrera no local : %s\n\n", comp[op - 1].nome);
    printf("%s, %s, CEP : %s\n\n", comp[op - 1].cidade, comp[op - 1].estado, comp[op - 1].cep);
    printf("Bairro : %s, Rua.%s - n %s\n\n", comp[op - 1].bairro, comp[op - 1].rua, comp[op - 1].num);
    printf("0. Voltar ao menu.\n\n");
    scanf("%d", &op);
    scanf("%[^\n]", lixo);
    fflush(stdin);
    menu();
}

void exibir() {
    system("cls");
    int j;
    if (i != 0) {
        for (j = 0; j < i; j++) {
            printf("%d - Titulo: %s\n\n", j + 1, comp[j].titulo);
            printf("Descricao:\n%s\n\n", comp[j].descrip);
            printf("Inicio : %d/%d/%d %d:%d\n", comp[j].datai[0], comp[j].datai[1], comp[j].datai[2], comp[j].horai[0], comp[j].horai[1]);
            printf("Final  : %d/%d/%d %d:%d", comp[j].dataf[0], comp[j].dataf[1], comp[j].dataf[2], comp[j].horaf[0], comp[j].horaf[1]);
            printf("\n-------------------------\n");
        }
        printf("\n0. Voltar ao menu.\nOu digite o numero do evento que deseja saber mais detalhes.\n");
        scanf("%d", &op);
        if (op == 0) {
            fflush(stdin);
            menu();
        }
        else {
            fflush(stdin);
            exibirmais();
        }
    }
    else {
        printf("não há compromissos marcados.\n\n1. Voltar ao menu.\n\n");
        scanf("%[^\n]", lixo);
        fflush(stdin);
        menu();
    }
}
void excluir() {
    system("cls");
    if (i != 0) {
        printf("deseja apagar qual compromisso?\n\n");
        int j;
        for (j = 0; j < i; j++)
            printf("%d. %s\n", j + 1, comp[j].titulo);
        scanf("%d", &op);
        for (j = op - 1; j < i - 1; j++) {
            comp[j] = comp[j + 1];
        }
        i--;
        printf("Deseja:\n1. Apagar mais compromissos.\n2. Voltar ao menu\n\n");
        scanf("%d", &op);
        if (op == 1) {
            fflush(stdin);
            excluir();
        }
        else if (op == 2)
            menu();
    }
    else {
        printf("não há compromissos marcados.\n\n1. Voltar ao menu.\n\n");
        scanf("%[^\n]", lixo);
        fflush(stdin);
        menu();
    }
}

void menu() {
    system("cls");
    printf("Agenda compromissos\n\n");
    printf("1. Cadastrar compromissos\n");
    if (i != 0) {
        printf("2. Exibir compromissos\n");
        printf("3. Excluir compromissos\n");
        printf("4. Editar compromissos\n");
    }
    printf("0. Sair\n\n");

    scanf("%d", &op);

    if (op == 1) {
        fflush(stdin);
        cadastrar();
    }
    else if (op == 2) {
        fflush(stdin);
        exibir();
    }
    else if (op == 3) {
        fflush(stdin);
        excluir();
    }
    else if (op == 4) {
        fflush(stdin);
        editar();
    }
    else if (op == 0) {
        fflush(stdin);
        return 0;
    }

}
int main() {
    int j;
    fi = fopen("save\\i.txt", "r");
    fscanf(fi, "%d", &i);
    if (i){
        file = fopen("save\\save.txt", "r");
        fflush(stdin);
        for(j = 0; j < i; j++){
            fgets(comp[j].titulo, 100, file);
            fgets(comp[j].descrip, 200, file);
            fflush(stdin);
            fscanf(file, "%d/%d/%d\n", &comp[j].datai[0], &comp[j].datai[1], &comp[j].datai[2]);
            fscanf(file, "%d:%d\n", &comp[j].horai[0], &comp[j].horai[1]);
            fscanf(file, "%d/%d/%d\n", &comp[j].dataf[0], &comp[j].dataf[1], &comp[j].dataf[2]);
            fscanf(file, "%d:%d\n", &comp[j].horaf[0], &comp[j].horaf[1]);
            fflush(stdin);
            fgets(comp[j].nome, 100, file);
            fgets(comp[j].estado, 100, file);
            fgets(comp[j].cidade, 100, file);
            fgets(comp[j].cep, 100, file);
            fgets(comp[j].rua, 100, file);
            fgets(comp[j].num, 100, file);
            fgets(comp[j].bairro, 100, file);
            fflush(stdin);
        }
        fclose(fi);
        fclose(file);
    }

    menu();

    if (fi != NULL){
        file = fopen("save\\save.txt", "w");
        fflush(stdin);
        for(j = 0; j < i; j++){
            fflush(stdin);
            fprintf(file, "%s\n", comp[j].titulo);
            fprintf(file, "%s\n", comp[j].descrip);
            fprintf(file, "%d/%d/%d\n", comp[j].datai[0], comp[j].datai[1], comp[j].datai[2]);
            fprintf(file, "%d:%d\n", comp[j].horai[0], comp[j].horai[1]);
            fprintf(file, "%d/%d/%d\n", comp[j].dataf[0], comp[j].dataf[1], comp[j].dataf[2]);
            fprintf(file, "%d:%d\n", comp[j].horaf[0], comp[j].horaf[1]);
            fprintf(file, "%s\n", comp[j].nome);
            fprintf(file, "%s\n", comp[j].estado);
            fprintf(file, "%s\n", comp[j].cidade);
            fprintf(file, "%s\n", comp[j].cep);
            fprintf(file, "%s\n", comp[j].rua);
            fprintf(file, "%s\n", comp[j].num);
            fprintf(file, "%s\n", comp[j].bairro);
        }
        fclose(file);
    }
    return 0;
}

*dica, antes de executar meu programa, criem uma pasta "save" na mesma pasta aonde forem compilar, pro sistema funcionar direitinho.

Com meu programa eu quero ver se existe um arquivo "i.txt", se ele existir é porque existe dados cadastrados, esse meu txt se atualiza toda vez que um cadastro novo é inserido, e inicializa a variavel global i que eu tenho no meu programa pra eu poder saber aonde eu posso cadastrar e quantos cadastros já existem.

O meu problema e na hora de salvar no arquivo, se vocês fizerem um cadastro, fecharem o programa e depois abrirem, o sistema funciona, mas se você fechar o programa novamente ele simplismente adiciona espaços aonde não precisa no salvamento e assim na hora da leitura o programa nunca sabe como ler.

exemplo:

salvei 1 1 1 1 no save.txt

1 passada -  txt fica assim. 1\n1\n1\n1\n

2 passada - txt fica assim. 1\n\n1\n\n1\n\n1\n\n

esses \n significam uma quebra de linha no arquivo mesmo, igual apertar enter.

preciso que não importa quantas passadas, quero que o arquivo sempre fique 1\n1\n1\n1\n.

podem me ajudar pf?

Edited by Brayan Nayou
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148884
    • Total Posts
      644901
×
×
  • Create New...