Ir para conteúdo
Fórum Script Brasil
  • 0

Problema em salvamento em arquivos


Brayan Nayou

Pergunta

#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?

Editado por Brayan Nayou
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...