ciao a tutti ho questo problema: ho fatto un programma che immetto da tastiera nome squadra, vittorie, pareggi,sconfitte e punti e mi fa la classifica, champions e uefa XD ho però un problema con i files. il problema o sta nel main o nella funzione aggiungi: se scrivo io il file di testo e poi successivamente faccio partire il programma, mi legge il file e mi fa la classifica e se dopo voglio aggiungere una squadra mi dice che è tutto ok, ma all'entrata nella funzione "aggiungi" il file mi diventa vuoto. continua a leggermi la classifica perchè credo che i valori siano copiati nel record sulla ram, ma se poi chiudo e riapro il programma il file database.txt è vuoto. sapete spiegarmi dov'è ke sbaglio?
grazie ^^
questo è il programma...
codice:
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
fstream miofile;
typedef struct elementi record;
struct elementi{
char nome[20];
int V;
int P;
int S;
int punti;
};
void aggiungi(record s[],int&riemp)
{
miofile.open("database.txt", ios::out|ios::ate);
if(riemp<=0){
cout<<"\nInserire nome squadra: ";
cin>>s[riemp].nome;
miofile<<s[riemp].nome;
miofile<<endl;
}
else{
char NOME[20];
bool continua;
int esito;
do{
continua=false;
cout<<"\nInserire nome squadra: ";
cin>>NOME;
for(int i=0;i<riemp;i++){
esito=strcmp(NOME,s[i].nome);
if(esito==0){
continua=true;
cout<<"SQUADRA GIA' ESISTENTE.\a\a\a\n\n\n";
}//IF
else{
strcpy(s[riemp].nome,NOME);
miofile<<s[riemp].nome;
miofile<<endl;
}//ELSE
}//FOR
}while(continua);
}//ELSE
cout<<"\nInserire VITTORIE: ";
cin>>s[riemp].V;
miofile<<s[riemp].V;
miofile<<endl;
cout<<"\nInserire PAREGGI: ";
cin>>s[riemp].P;
miofile<<s[riemp].P;
miofile<<endl;
cout<<"\nInserire SCONFITTE: ";
cin>>s[riemp].S;
miofile<<s[riemp].S;
miofile<<endl;
s[riemp].punti=(s[riemp].V*3)+s[riemp].P;
cout<<"\n------> PUNTI: " <<s[riemp].punti <<" <--------\n\n\n";
miofile<<s[riemp].punti;
miofile<<endl;
riemp++;
miofile.close();
}
void scambia(record s[], int i, int posmin)
{
record TEMP=s[i];
s[i]=s[posmin];
s[posmin]=TEMP;
}
void classifica(record s[], int&riemp)
{
int posmin;
for(int i=0;i<riemp-1;i++){
posmin=i;
for(int j=i+1;j<riemp;j++){
if(s[j].punti<s[posmin].punti){
posmin=j;
}
}
if(posmin!=i){
scambia(s,i,posmin);
}
}
}
void capovolgi(record s[], int&riemp)
{
record s2[20];
int k=riemp-1;
for(int i=0;i<riemp;i++){
s2[i]=s[k--];
}
for(int j=0;j<riemp;j++){
s[j]=s2[j];
}
}
void mostra(record s[], int&riemp)
{
cout<<"\n-----------CLASSIFICA------------\n";
cout<<" NOME PUNTI V P S \n";
for(int i=0;i<riemp;i++){
cout<<i+1 <<") " <<s[i].nome <<" " <<s[i].punti <<" " <<s[i].V <<" " <<s[i].P;
cout<<" " <<s[i].S <<"\n\n";
}
cout<<"\n---------------------------------\n";
}
void champions(record s[], int&riemp)
{
char coppa[20];
bool b_coppa=true;
cout<<"\nchi ha vinto la coppa italia? ";
cin>>coppa;
cout<<"\nIn champion's league vanno:\n";
if(riemp<4){
for(int i=0;i<riemp;i++){
if(strcmp(coppa,s[i].nome)==0){
b_coppa=false;
}
cout<<s[i].nome <<endl;
}
if(b_coppa){
cout<<coppa <<endl;
}
}
else{
for(int j=0;j<4;j++){
if(strcmp(coppa,s[j].nome)==0){
b_coppa=false;
}
cout<<s[j].nome <<endl;
}
if(b_coppa){
cout<<coppa <<endl;
}
}
cout<<"----------------------------\n";
}
void uefa(record s[], int&riemp)
{
if(riemp<4){
cout<<"errore! inserire almeno 5 squadre!\n\a";
}
else{
cout<<"\nIn europa league vanno:\n";
for(int i=4;i<6;i++){
cout<<s[i].nome <<endl;
}
cout<<"----------------------\n";
}
}
int main(){
record S[20];
int RIEMP=0;
bool CONTINUA=true;
int scelta;
bool ciclo=true;
char SCELTA[20];
if(!miofile){
cout<<"database non trovato.\n";
system("pause");
}
else{
miofile.open("database.txt",ios::in);
while(!miofile.eof()){
miofile>>S[RIEMP].nome;
miofile>>S[RIEMP].V;
miofile>>S[RIEMP].P;
miofile>>S[RIEMP].S;
miofile>>S[RIEMP].punti;
RIEMP++;
}
miofile.close();
do{
cout<<"1)aggiungi\n2)classifica\n3)champion's\n4)europa_league\n0)ESCI\nche vuoi fare??\n";
cin>>SCELTA;
cout<<"\n\n";
if(strcmp(SCELTA,"1")==0 || strcmp(SCELTA,"aggiungi")==0){
aggiungi(S,RIEMP);
}
else{
if(strcmp(SCELTA,"2")==0 || strcmp(SCELTA,"classifica")==0){
classifica(S,RIEMP);
capovolgi(S,RIEMP);
mostra(S,RIEMP);
}
else{
if(strcmp(SCELTA,"3")==0 || strcmp(SCELTA,"champion's")==0){
classifica(S,RIEMP);
capovolgi(S,RIEMP);
champions(S,RIEMP);
}
else{
if(strcmp(SCELTA,"4")==0 || strcmp(SCELTA,"europa_league")==0){
classifica(S,RIEMP);
capovolgi(S,RIEMP);
uefa(S,RIEMP);
}
else{
if(strcmp(SCELTA,"0")==0 || strcmp(SCELTA,"ESCI")==0 || strcmp(SCELTA,"esci")==0){
ciclo=false;
}
else{
cout<<"ERRORE!!!!\n\n\n";
}
}
}
}
}
}while(ciclo);
}
return 0;
}
ho provato sia a fare
"miofile.open("database.txt", ios:ut|ios::ate)"
che
"miofile.open("database.txt", ios:ut|ios::app)"
ps
ignorate tranquillamente queste void: champions,uefa,classifica,scabia,capovolgi. lì i file non li tocco prp, sono sicuro che funzionano perchè il programma senza l'uso dei file va perfetto.
volevo fare "ios::nocreate" o "ios::no replace", ma dice ke non sono inclusi nella libreria... ._.
spero che qualcuno possa aiutarmi, non riesco proprio a farlo :S
vi ringrazio ancora ^^