lomba 0 Denunciar mensagem Publicado 15 de Janeiro de 2012 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 278 Denunciar mensagem Publicado 15 de Janeiro de 2012 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 0 Denunciar mensagem Publicado 15 de Janeiro de 2012 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 96 Denunciar mensagem Publicado 15 de Janeiro de 2012 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
lomba 0 Denunciar mensagem Publicado 15 de Janeiro de 2012 Obrigado pelas dicas. Ja esta resolvido Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites