Enviado em 18/11/2018 - 12:21h
Bom , esse exercício é para faculdade, mas estou tendo problemas com alguns erros que não consigo arrumar nem com poder divino.
1 - Minha professora usa windows e la eles usam a função gets_s, aqui eu tentei usar a funçção gets mas não foi com muito sucesso, substituí por fgets ou cin (scanf) ,segundo ela disso que isso não é o ideal.
2 - Eu preciso criar um arquivo .txt mostrando as entradas que foi efetuada no código, e mesmo usando uma das duas funções que citei acima (fgets ou scanf) ele cria o arquivo, contudo o arquivo é criado vazio.
Já tentei pedir ajuda para os professores da faculdade e eles sempre dizem que não sabem mexer no compilador GCC e linux e tals, o que eu acho um absurdo.
A seguir o código:
1 - Minha professora usa windows e la eles usam a função gets_s, aqui eu tentei usar a funçção gets mas não foi com muito sucesso, substituí por fgets ou cin (scanf) ,segundo ela disso que isso não é o ideal.
2 - Eu preciso criar um arquivo .txt mostrando as entradas que foi efetuada no código, e mesmo usando uma das duas funções que citei acima (fgets ou scanf) ele cria o arquivo, contudo o arquivo é criado vazio.
Já tentei pedir ajuda para os professores da faculdade e eles sempre dizem que não sabem mexer no compilador GCC e linux e tals, o que eu acho um absurdo.
A seguir o código:
#include <iostream>
#include <string.h>
#include <math.h>
#include <cstdio>
using namespace std;
typedef struct reg
{
char nome [20];
char tel [20];
char email [20];
};
int tamanho (FILE * );
void cadastrar (FILE *);
void consultar (FILE *);
void gerararqtxt (FILE *);
int main()
{
int op;
FILE *arq;
if ((arq = fopen("dados.dat" , "rb+")) == NULL) //fopen abrindo o arquivo
{
if ((arq = fopen ("dados.dat", "wb+")) == NULL) // sinal de + é para ler e escrever
{
cout << "Falha ao abrir o arquivo\n";
system("pause");
}
}
do
{
system ("clear");
cout << "========== AGENDA ==========";
cout << "\n 1 - Cadastrar\n";
cout << "\n 2 - Consultar\n";
cout << "\n 3 - Gerar arquivo\n";
cout << "\n 4 - Sair\n";
cout << "========== Contatos: %d=\n", tamanho(arq);
cout << "Opção: ";
cin >> op;
switch (op)
{
case 1: // Cadastrar novo contato
cadastrar(arq);
break;
case 2: //Consultnado contato por registro
consultar (arq);
break;
case 3: //Gerando arquivo txt com todos os contatos
gerararqtxt(arq);
break;
case 4: //fechando arquivo
fclose(arq);
}
}while (op != 4);
}
void cadastrar(FILE *arq)
{
class reg contato;
char confirma;
fflush(stdin); // fflush para limpar o buffer
cout << "Cadastrando novo registo: \n";
cout << "\n Numero do registro: \n", tamanho(arq) +1;
getchar();
cout << "Nome................: ";
fgets(contato.nome, 15 , stdin);// Aqui era para usar o gets
cout << "\nTelefone..........: ";
fgets(contato.tel, 15, stdin); // Aqui tambem
cout <<"\nEmail..............: ";
fgets (contato.email, 20 ,stdin);// Aqui tambem
cout << "\nConfirma <s/n>: ";
cin >> confirma;
if (toupper(confirma) == 'S')
{
cout << "\n Gravando ....: \n";
fseek(arq,0,SEEK_END);
fwrite(&contato, sizeof(reg), 1, arq);
}
}
int tamanho(FILE *arq)
{
fseek(arq, 0,SEEK_END);
return ftell(arq) / sizeof(reg);
}
void consultar(FILE *arq)
{
reg contato;
int nr;
cout << "\n Consulta pelo Codigo\n";
cout << "\n Informe o Código....: ";
cin >> nr;
if ((nr <= tamanho(arq)) && (nr > 0))
{
fseek(arq, (nr - 1) * sizeof (reg), SEEK_SET);
fread(&contato, sizeof (reg), 1, arq);
cout << "\n Nome............:", contato.nome;
cout << "\n Telefone........:", contato.tel;
cout << "\n ne-mail...........:", contato.email;
}
else
{
cout << "\n Número de registro inválido!";
}
system("pause");
}
void gerararqtxt(FILE *arq)
{
char nomearq [20];
cout << "Digite o nome do arquivo";
cin >> nomearq;
strcat (nomearq,".txt");
FILE *arqtxt = fopen(nomearq, "w");
if (!arqtxt);
{
cout << "Não foi possível criar esse arquivo!\n";
system("pause");
return;
}
fprintf(arqtxt, "Nome Telefone email\n");
fprintf(arqtxt, "==============================================\n");
int nr;
reg contato;
for (nr = 0; nr < tamanho(arq); nr++)
{
fseek(arq, nr * sizeof(reg), SEEK_SET);
fread(&contato, sizeof(reg), 1, arq);
fprintf(arqtxt, "%-20s-%12s%-20s\n", contato.nome, contato.tel, contato.email);
fprintf(arqtxt, "===========================================================\n");
fclose(arqtxt);
}
}