Array
(
)

Salvar sem sobrescrever no Dev c++

José Augusto
   - 26 set 2014

Fala galera! Eu escrevi um código para simplesmente poder imputar algumas informações e salva-las em um arquivo txt. Essa parte eu consegui fazer, meu programa está criando um arquivo de texto e salvando minhas informações porém quando eu fecho o programa e abro novamente as informações que são imputadas sobrescrevem as informações já existentes no bloco de notas. Minha dúvida é a seguinte: como salvar novas informações sem sobrescrever as informações já existentes? Se a explicação referente a duvida não ficou clara o suficiente o código está logo abaixo para poderem executar e analisar a forma como ele está trabalhando. O código foi escrito no DEV C++.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct emprestimo
{
char nome[100];
int data;
float val_emprestado;
};
struct emprestimo info;
void informar(void);
main()
{

FILE *arquivo;

arquivo = fopen("Emprestimos.txt", "w");

if(arquivo == NULL)
{
printf("Arquivo nao pode ser aberto!");
}
//----------------------------------------------------------------------------
//Escolha da opcão
int opcao;
do
{
system("cls");
printf("Selecione uma opcao:");
printf("\n\n1 - Informar");
printf("\n2 - Sair\n");
scanf("%d", &opcao);
if(opcao == 1)
{
system("cls");
printf("Nome: ");
scanf("%s", info.nome);
fprintf(arquivo , "\n\nNome: %s", info.nome);

printf("Data do emprestimo: ");
scanf("%d", &info.data);
fprintf(arquivo , "\nData do empréstimo: %d", info.data);

printf("Valor emprestado: ");
scanf("%f", &info.val_emprestado);
fprintf(arquivo , "\nValor emprestado: R$ %.2f", info.val_emprestado);
//----------------------------------------------------------------------------
// Pergunta para saber se o usuário deseja mais alguma coisa
system("cls");
printf("Algo mais?");
printf("\n1 - Para SIM");
printf("\n2 - Para NAO\n");
scanf("%d", &opcao);
if(opcao == 2)
{
system("cls");
printf("Operacao Finalizada!");
getch();
return 0;
}
}
//----------------------------------------------------------------------------
else if(opcao == 2)
{
system("cls");
printf("Operacao Finalizada!");
getch();
return 0;
}
}while(opcao == 1);
getch();
}

Jpdesignerrio
   - 29 set 2014

Não entendo muito de C++, mas está certo ter um
If (opcao ==2) e logo depois um
Elseif (opcao ==2)?
Está verificando a mesma coisa em sequência

Jpdesignerrio
   - 29 set 2014

Da uma olhada no manual da linguagem,
Procura algo como 'append' que abre o arquivo e vai para a ultima linha,
Assim nao sobrescreve.
Ps: append é no Delphi, deve mudar pouca coisa ou nada.

José Augusto
   - 29 set 2014

Está sim sim cara, uma dica: nunca leve em conta o visual de um código, sempre tente compila-lo para entender seu funcionamento. Analise que existem dois "Ifs", o primeiro trata o caso do usuário escolher a opção 2(sair) logo no inicio, e o segundo IF trata o caso do usuário escolher a opção 2 depois do código rodar pelo menos uma vez inteiramente. E o else if encontrado no final faz referência apenas ao primeiro If. Vlw!

José Augusto
   - 29 set 2014

Obrigado!! Vou dar uma olhada sim

José Augusto
   - 29 set 2014

Obrigado!! Vou dar uma olhada sim