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

lomba

imprimir ficheiro de texto

Mensagens Recomendadas

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


Ligação para a mensagem
Partilhar noutros sites
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.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação 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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.