Make.Love
Banido
Viva a todos
tou aqui com um pequeno problema, é o seguinte:
Queria fazer o output dos dados tal como aparecem na consola para um ficheiro txt, a abertura, escrita, etc dos dados ja esta feita, no entanto a formatação da string para o ficheiro n aparece correcta, nem os dados ficam nas linhas e colunas como na consola.
Se alguém puder dar uma ajuda agradecia.
Já nao sei mesmo o que fazer...
Fica aqui o output:
tou aqui com um pequeno problema, é o seguinte:
Queria fazer o output dos dados tal como aparecem na consola para um ficheiro txt, a abertura, escrita, etc dos dados ja esta feita, no entanto a formatação da string para o ficheiro n aparece correcta, nem os dados ficam nas linhas e colunas como na consola.
Se alguém puder dar uma ajuda agradecia.
Código:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
struct Pessoa
{
char nome[20];
char morada[50];
char telefone[15];
};
const int nrPessoas = 20;
Pessoa listaPessoas[nrPessoas];
void imprimirMenu()
{
system("cls");
printf("*******************************\n");
printf("* Tratamento de Contactos *\n");
printf("*******************************\n");
printf("* Digite: *\n");
printf("* 1 - Introduzir dados *\n");
printf("* 2 - Ver tabela *\n");
printf("* Outra - Sair *\n");
printf("*******************************\n");
}
void lerDados()
{
FILE *ficheiro_input;
if ((ficheiro_input = fopen("e:\lista.telefonica.dados.txt", "w")) == NULL)
fprintf(stderr, "Não pode abrir %s\n", "e:\lista.telefonica.dados.txt");
char c;
while ((c = getc(ficheiro_input)) != EOF)
{
printf("%c", c);
}
fclose(ficheiro_input);
}
void guardarDados()
{
FILE *ficheiro_output;
if ((ficheiro_output = fopen("e:\lista.dados.txt", "w")) == NULL)
{
fprintf(stderr, "Não pode abrir %s\n", "e:\lista.dados.txt");
}
fclose(ficheiro_output);
}
void imprimirStringFormatada(char expressao[], int limite)
{
int k = 0;
while (expressao[k] != 0)
{
printf("%c", expressao[k]);
k++;
}
for (int j=k; j<limite; j++)
{
printf(" ");
}
}
void imprimirStringFormatada2(char expressao[], int limite)
{
FILE *ficheiro_output;
ficheiro_output = fopen("e:\lista.dados.txt", "r");
int k = 0;
while (expressao[k] != 0)
{
fprintf(ficheiro_output,"%c", expressao[k]);
k++;
}
for (int j=k; j<limite; j++)
{
fprintf(ficheiro_output," ");
}
}
void mostrarTabela()
{
system("cls");
printf("|---------------------------------------------------------------------------|\n");
printf("|NOME |MORADA |TELEFONE |\n");
printf("|---------------------------------------------------------------------------|\n");
for (int i = 0; i < nrPessoas; i++)
{
Pessoa p = listaPessoas[i];
printf("|");
imprimirStringFormatada(p.nome, 19);
printf("|");
imprimirStringFormatada(p.morada, 42);
printf("|");
imprimirStringFormatada(p.telefone, 12);
printf("|");
printf("\n");
}
printf("|---------------------------------------------------------------------------|\n");
printf("Prima Enter para voltar ao Menu");
char opcao[2];
gets(opcao);
}
void obterDados()
{
{
FILE *ficheiro_output;
ficheiro_output = fopen("e:\lista.dados.txt", "w");
if (ficheiro_output == NULL)
fprintf(stderr, "Nao pode abrir %s\n", "e:\lista.dados.txt");
else
{
printf("Ficheiro $s aberto com sucesso!!!\n", "e:\lista.dados.txt");
}
Pessoa p;
printf("Digite o nome:");
gets(p.nome);
fprintf(ficheiro_output,"%s", p.nome);
printf("Digite a morada:");
gets(p.morada);
fprintf(ficheiro_output,"%s", p.morada);
printf("Digite o telefone:");
gets(p.telefone);
fprintf(ficheiro_output,"%s", p.telefone);
fprintf(ficheiro_output, "\n");
fprintf(ficheiro_output,"|---------------------------------------------------------------------------|\n");
fprintf(ficheiro_output,"|NOME |MORADA |TELEFONE |\n");
fprintf(ficheiro_output,"|---------------------------------------------------------------------------|\n");
for (int i = 0; i < nrPessoas; i++)
{
Pessoa p = listaPessoas[i];
fprintf(ficheiro_output,"|");
imprimirStringFormatada2(p.nome, 19);
fprintf(ficheiro_output,"|");
imprimirStringFormatada2(p.morada, 42);
fprintf(ficheiro_output,"|");
imprimirStringFormatada2(p.telefone, 12);
fprintf(ficheiro_output,"|");
fprintf(ficheiro_output,"\n");
}
fprintf(ficheiro_output,"|---------------------------------------------------------------------------|\n");
int i = 0;
while (listaPessoas[i].nome[0] != 0)
{
i++;
}
if (i<nrPessoas) // só pode colocar no vector se o vector tiver espaço
{
listaPessoas[i] = p;
}
}
}
//void bubble_sort()
//{
// while (true)
// {
// bool trocou = false;
// for (int i=0; i< listsize; i++)
// {
// if (comparar(lista[i], lista[i + 1]) == 1) //Se estão naordem inversa
// {
// trocar(i,i+1);
// trocou = true; // Como houve pelo menos uma
// // troca a lista pode não estar ordenada
// }
// }
// if (trocou == false) // Se não houve nenhuma troca a lista está já ordenada
// return;
// }
//}
void main()
{
bool continuar = true;
char opcao[2];
while (continuar)
{
imprimirMenu();
gets(opcao);
if (opcao[0] == '1')
{ obterDados();
guardarDados();
}
else if (opcao[0] == '2')
mostrarTabela();
else
continuar = false;
}
}
Já nao sei mesmo o que fazer...
Fica aqui o output: