Boa tarde, estou implementado este programa em que leio 5 endereços do teclado e imprimo a pilha na tela e em um arquivo. Até aqui tranquilo o problema é que o conteúdo do arquivo não apaga quando adiciono novos endereços, ou seja ele imprime os novos endereços no arquivo mantendo junto com os já salvos, alguém tem uma ideia de como resolver?
OBS: já utilizei ''w'' no fopen para abrir o arquivo e dai ele imprime somente a primeira string no arquivo.
#include <stdio.h>
#include <string.h>
#define MAX 5
#define TAM 100
char pilha[MAX][TAM] = {0}; //pilha de 5 strings de 100 caracteres cada. Ou seja... podemos empilhar 5 objetos(frases) de até 100 letras cada. Isso contando com que MAX tenha um valor de 5 claro
int top = 0;
//Empilha um elemento até que a pilha esteja cheia. Se estiver cheia mostra um aviso"Pilha Cheia!"
void empilhar ( char endereco[TAM] ) {
if ( top < MAX ) {
strcpy ( pilha[top],endereco);
top++;
}else{
printf("Erro: Pilha Cheia! Tentou empilhar \"%s\" na posicao %d que nao se permite.\n\n",endereco, MAX+1);
}
}
//Imprime a pilha de abaixo para cima si a pilha não estiver vazia. Caso contrario, se a pilha estiver vazia, mostra "Pilha Vazia"
void imprimirPilha() {
int i;
FILE *pArq;
if(top != 0){
printf("Conteudo da pilha:\n");
for ( i = top-1; i >= 0 ; i-- ) {
printf ( "\"%s\"\n", pilha[i] );
if((pArq = fopen("Historico.txt","a")) == NULL)
{
printf("Erro ao abrir arquivo!!!\n");
exit(1);
}
fprintf(pArq,"%s\n",pilha[i]);
fclose(pArq);
}
}
else{
printf("Conteudo da pilha:\n");
printf("Vazia!\n\n");
}
}
//Desempilha um elemento. Caso não tenha nada mais que desempilhar mostra um aviso
void desempilhar() {
int i;
if ( top > 0 ) {
printf("Desempilhar posicao %d da pilha. Continha \"%s\"\n\n", top, pilha[top-1] );
for ( i = 0; i < TAM ; i++ ) {
pilha[top-1][i] = 0;
}
top--;
}else{
printf("Erro: Tentando desempilhar pilha vazia\n\n");
}
}
int main() {
char endereco[100];
int i;
for(i=0;i<MAX;i++){
printf("Informe o endereco[%d]: ",i);
gets(endereco);
empilhar (endereco);
}
imprimirPilha();
desempilhar();
imprimirPilha();
}