dvieira0801
(usa Fedora)
Enviado em 10/09/2010 - 13:22h
Cara, resolvi fazer algo mais simples. Melhor começar mais de baixo para depois ir complicando. Não se preocupe, sua dica tá salva aqui, depois vou trabalhar nela. O fato é que preciso do programa urgentemente, então vou fazer algo bem simples mesmo. Mas ainda quero ajuda.
Olha o programa que fiz:
#include <stdio.h>
#include <stdlib.h>
#define max 10
void push(int stack[], int *top, int value)
{
if(*top<max)
{
*top=*top+1;
stack[*top]=value;
}
else
{
printf("Pilha Cheia!\n");
}
}
void pop(int stack[], int *top, int * value)
{
if(*top>=0)
{
*value=stack[*top];
*top=*top-1;
}
else
{
printf("A pilha já está vazia.\n");
}
}
void checagem(int *top)
{
if(*top>=0)
{
printf("A pilha não está vazia.\n");
}
else
{
printf("A pilha está vazia.\n");
}
}
void lertopo(int stack[], int *top)
{
printf("O topo da pilha e': %d\n", stack[*top]);
}
void listar(int stack[], int *top)
{
printf("O topo e' %d\n \n", stack[*top]);
int i;
for(i=0;i<*top;i++)
printf("%d\n", stack[i]);
}
void arquivar(int stack[],int *top)
{
FILE *p;
int i;
if((p=fopen("taveira.bin", "wb")) == NULL)
{
printf("Erro na abertura do arquivo");
exit(1);
}
for(i=0; i<*top; i++)
putc(stack[i], p);
printf("Gravado!\n");
fclose(p);
}
void abrir(int stack[], int *top, int *value)
{
FILE *p;
int i;
if((p=fopen("taveira.bin", "rb")) == NULL)
{
printf("Erro na abertura do arquivo");
exit(1);
}
if(fread(&stack, sizeof(int),1,p)!=1)
printf("Erro na leitura do arquivo");
for(i=0; i<*top; i++)
printf("%d\n", stack[i]);
fclose(p);
}
int main()
{
FILE *p;
int stack[max];
int *top=-1;
int n,value;
int opt;
do{
printf("Digite sua opção: \n1 -> Adicionar um numero na pilha \n2 -> Retirar um numero da pilha \n3 -> Testar se a pilha está vazia \n4 -> Ler o topo da pilha \n5 -> Listar a pilha \n6 -> Gravar a pilha em um arquivo \n7 -> Ler a pilha contida no arquivo \n0 -> Sair \n");
scanf("%d", &opt);
switch(opt){
case 1: printf("Digite um elemento para ser adicionado: ");
scanf("%d", &value);
push(stack,&top,value); break;
case 2: pop(stack,&top,&value);
printf("O valor retirado foi %d\n", value);break;
case 3: checagem(&top); break;
case 4: lertopo(stack,&top); break;
case 5: listar(stack,&top); break;
case 6: arquivar(stack,&top); break;
case 7: abrir(stack,&top,&value); break;
case 0: break;
default: printf("Opcao Invalida!\n"); break;
}
}while(opt!=0);
return 0;
}
Cara, tudo está dando certo, menos essa parte de gravar no arquivo e ler o arquivo. Estou tendo muitas dificuldades nisso. Como posso salvar e ler o arquivo nesse caso? Veja que eu criei uma função pra criar o arquivo e outra para lê-lo. Tá certo isso? Você pode me ajudar? No caso estou trabalhando somente com números inteiros. Tenta rodar ele aí.
Abraço