Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

lomba

imprimir ficheiro de texto

Mensagens Recomendadas

lomba    0
lomba

Estou com um problema e imprimir ficheiro de texto, do qual o ficheiro grava em branco, ou seja não escreve nada.

char* print(char *op, DIVISAO *zona, int *verifiva, int *variavel, int *posicao, char *str_passagem, char *nome_fich_txt1)
{
    char *nome_fich_txt2, verifica_sem_nome[20]={0};                //para verificar que nao tem nenhum nome introduzido

    nome_fich_txt2=(char *)malloc(21);
    printf("\n\t! O ficheiro vai ser guardado com o nome < %s > \n\n\t\tDeseja alterar?\nS - Sim\nN - Nao --> ",nome_fich_txt1);
    selecao(op);
    if(*op=='S')
    {
            if(strcmp(nome_fich_txt1,verifica_sem_nome)==0)
                strcpy(nome_fich_txt1,".dat");
            printf("\n\tInsira o nome do ficheiro, tipo:< nome.%s > --> ",(nome_fich_txt1+strlen(nome_fich_txt1))-3);
            maiusculas_pesquisa(zona,verifiva,variavel,posicao,str_passagem);
            strcpy(nome_fich_txt2,str_passagem);
            printf("\n\tO ficheiro vai ser guardado como < %s > ",nome_fich_txt2);
            return nome_fich_txt2;
    }
    else
        return nome_fich_txt1;
}

void imprimir(char *op,DIVISAO *zona, int *verifiva, int *variavel, int *posicao, char *str_passagem)
{
    int i,j;
    char *imprime_fich;
    FILE *saida=stdout;

    system("cls");
    printf("\t\t\t     ***** Imprimir *****\n");
    fprintf(saida,"\n\n\n\n\tcasa com duas divisoes.");
    fprintf(saida,"\n\n\n\n\tcasa com mais potencia gerada.");
    fprintf(saida,"\n\n\n\n\tcasa com melhor relacao potencia gerada/horas: 2f");
    if (saida!=stdout)
    {
        fclose(saida);
        printf("\n\n\tA informacao foi guardada: \n\n\n\t\tFicheiro: < %s >",imprime_fich);
        free (imprime_fich);
        return;
    }
    printf("\n\n\n\n\n\n\t! Esta informacao pode ser impressa em ficheiro de texto");
    printf("\n\n\t\tDeseja imprimir?\nS - Sim\nN - Nao --> ");
    selecao(op);
    if(*op=='S')
    {
        imprime_fich=print(op,zona,verifiva,variavel,posicao,str_passagem,"divisoes_info.txt");
        saida=fopen(imprime_fich,"w");
    }
    printf("\n\n\n\n\n\n\t! Esta informacao pode ser impressa em ficheiro de texto");
}

o que eu deparei é que não acontece saida!=stdout mas não percebo porque.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Não estás a escrever nada para um ficheiro nessas funções.

É normal que o if não aconteça. Estás a dizer que o ponteiro saida é igual ao stdout e a verificar se são diferentes.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
lomba    0
lomba

se saida==stdout

aparece-me a mensagem "o identificador é invalido" e já não faz mais nada.

Se saida!=stdout

não faz o que se encontra dentro de chavetas e a impressão sai em branco, não aparece texto nenhum escrito.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

O fopen deve vir sempre antes do fclose!

Tu tens o fopen no fim da função imprimir(), dentro dum if; e o fclose mais ou menos a meio, dentro doutro if.

Além disso tens um free (imprime_fich) para o qual eu não vejo razão da sua existência.

Sugestão: não passes milhentos parametros para as tuas funções; passa só o necessário e cria as outras variáveis como variáveis locais dentro da função.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade