Garfild666
(usa OpenSuSE)
Enviado em 17/06/2008 - 20:45h
Estou com um problema no meu codigo...
ele simplismente não passa os dados do buffer para o arquivo...
e o intereçante eh q o fwrite retorna 1...mas ele não escreve nda no arquivo
ai segue o codigo.
se alguem puder me ajudar...eu agradeço desd jah
muito obrigado pela sua paciencia!
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
//ponteiro do arquivo
FILE *arq, *arq1;
//dados a serem passados para o arquivo
struct dados
{
int codigo,estoque;
char albun[15],artist[15],estilo[15];
float preco;
};
void indice(void);
void sair(void);
void wait(float seconds);
int testl(int test);
void tolowers(char *trns);
int main()
{
struct dados buffer;
char opcao;
char continua='s';
int continua2;
system("clear");
printf("Criando o arquivo em ~/dados\n");
wait(1);
if(!(arq=fopen("dados","a+b")))
{
printf("\nErro fatal!\n");
sair();
}
else
printf("Criação bem sucedida!\n");
wait(2);
system("clear");
while(continua=='s'||continua=='S')
{
indice();
printf("Operacao desejada: ");
__fpurge(stdin);
scanf("%c", &opcao);
system("clear");
switch(opcao)
{
case 'i':
case 'I':
while(continua=='s'||continua=='S')
{
continua2=1;
while(continua2)
{
continua2=0;
printf("Adicione os dados do novo cd:\n");
printf("Codigo: ");
scanf("%i", &buffer.codigo);
if(buffer.codigo<1)
{
printf("Codigo invalido, apenas inteiros positivos.\n");
continua2=1;
printf("Espere...\n");
wait(2);
system("clear");
}
else
if(testl(buffer.codigo))
{
printf("Esse codigo jah existe\n");
printf("Espere...\n");
continua2=1;
wait(2);
}
}
wait(0.5);
system("clear");
continua2=1;
while(continua2)
{
continua2=0;
printf("Adicione os dados do novo cd:\n");
printf("Artista: ");
__fpurge(stdin);
gets(buffer.artist);
wait(0.5);
system("clear");
printf("Adicione os dados do novo cd:\n");
printf("Album: ");
__fpurge(stdin);
gets(buffer.albun);
tolowers(buffer.artist);
tolowers(buffer.albun);
if(testd(buffer.albun, buffer.artist))
{
printf("CD jah cadastrado\n");
printf("Espere...\n");
continua2=1;
wait(2);
system("clear");
}
}
wait(0.5);
system("clear");
printf("Adicione os dados do novo cd:\n");
printf("Estilo: ");
__fpurge(stdin);
gets(buffer.estilo);
wait(0.5);
system("clear");
continua2=1;
while(continua2)
{
continua2=0;
printf("Adicione os dados do novo cd:\n");
printf("preço: ");
scanf("%f", &buffer.preco);
if(buffer.preco<=0)
{
printf("preço invalido, somente preços positivos\n");
continua2=1;
printf("Espere...\n");
wait(2);
}
}
system("clear");
wait(0.5);
continua2=1;
while(continua2)
{
continua2=0;
printf("Adicione os dados do novo cd:\n");
printf("Quantidade em estoque: ");
__fpurge(stdin);
scanf("%i", &buffer.estoque);
if(buffer.estoque<=0)
{
printf("Numero invalido, somente numeros positivos\n");
continua2=1;
printf("Espere...\n");
wait(2);
}
}
system("clear");
printf("Gravando...\n");
wait(2);
fseek(arq, (buffer.codigo-1)*sizeof(struct dados), SEEK_SET);
if(fwrite(&buffer, sizeof(struct dados), 1, arq))
{
printf("Gravado com sucesso!!!\n");
printf("Deseja cadastrar mais cds?(s/n)\n");
__fpurge(stdin);
scanf("%c", &continua);
__fpurge(arq);
system("clear");
}
else
{
printf("Ocorreu um erro na gravação\n");
printf("Incira os dados novamento\n");
printf("Espere...\n");
wait(2);
}
}
continua='s';
break;
case 'l':
case 'L':
while(!feof(arq))
{
if(fread(&buffer, sizeof(struct dados), 1, arq1))
if(buffer.codigo)
{
printf("Artista: ");
puts(buffer.artist);
printf("Album: ");
puts(buffer.albun);
printf("Estilo: ");
puts(buffer.estilo);
printf("Preço: %.1f\n", buffer.preco);
printf("Em estoque: %i\n", buffer.estoque);
}
}
wait(3);
break;
case 's':
case 'S':
// logo();
printf("Obrigado por usar o meu software!!!!\n");
printf("Bye Bye\n");
wait(2);
sair();
}
}
}
//cria o indice
void indice(void)
{
printf(" Indice Tarefa\n");
printf("-> I Inclusão <-\n");
printf("-> L Listar <-\n");
printf("-> S Sair <-\n");
}
//fecha o programa
void sair(void)
{
fclose(arq);
system("clear");
exit(0);
}
//faz a tela travar
void wait (float seconds)
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
//teste para ver se a posição jah eh ocupada
int testl(int test)
{
struct dados teste;
fseek(arq, (test-1)*sizeof(struct dados), SEEK_SET);
fread(&teste, sizeof(struct dados), 1, arq);
if(teste.codigo==test)
return 1;
else
return 0;
}
//teste paraver se o cd jah foi incluido no arquivo
int testd(char *test, char *test2)
{
struct dados teste;
int n=0;
while(!feof(arq))
{
if(fread(&teste,sizeof(struct dados), 1, arq))
if(!(strcmp(teste.albun, test)))
if(!(strcmp(teste.artist, test2)))
n++;
}
if(n==1)
return 1;
else
return 0;
}
//passa uma string inteira para letra minuscula
void tolowers(char *trns)
{
int i;
for(i=0;i<strlen(trns);i++)
tolower(trns[i]);
}