Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[c++]apertura di un file!

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[c++]apertura di un file!

Messaggioda vale461mito » ven mar 30, 2007 11:15 pm

sto sviluppando un codice in c++, la classica rubrica, ed ho un problema con l'apertura del file rubrica.txt.
ecco vi posto qui il mio codice magari mi date una mano!
Codice: Seleziona tutto

#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//rubrica implementata con la classe fstream

struct rubrica
{
   char name[20];
   char surn[20];
   char city[20];
   char tele[20];
   char addr[20];
   char mail[20];
};
rubrica r;
fstream f;   //oggetto istanziato
int i; //variabile contatore

void print_file();
void search_bin();
void insert();
void cancella();

int main()
{
   int choose, flag = 0;
   char r;
   //clrscr();

   cout<<"Programma realizzato da COTUGNO COSIMO"<<endl;
   cout<<"4^B inf"<<endl;
   cout<<"Premi un tasto>>>";
   getch();
   do
   {
      //clrscr();
      cout<<"Rubrica:"<<endl;
      cout<<"1.Inserimento;"<<endl;
      cout<<"2.Ricerca;"<<endl;
      cout<<"3.Stampa;"<<endl;
      cout<<"4.Cancellazione;"<<endl;
      cout<<"0.Uscita."<<endl;
      cout<<"Select your favourite options:\t";
      cin>>choose;
      switch(choose)
      {
         case 1:
            insert();
            break;
         case 2:
            search_bin();
            break;
         case 3:
            print_file();
            break;
         case 4:
            //cancella();
            break;
         case 0:
            flag = 1;
            exit(0);
            break;
         default:
            cout<<"Error!";
            break;
      }
   }while(!flag);
    return (0);
}

void insert()
{

   f.open("rubrica.txt", ios::app);
   if(f.fail())
   {
      cout<<"\nErrore nell'apertura del file";
   }
   else
   {
      cout<<"\nInserire il nome:\t";
      gets(r.name);
      f.write((char*) & (r.name), sizeof(r.name));
      cout<<"\nInserire il cognome:\t";
        gets(r.surn);
      f.write((char*) & (r.surn), sizeof(r.surn));
      cout<<"\nInserire la citt…:\t";
      gets(r.city);
      f.write((char*) & (r.city), sizeof(r.city));
      cout<<"\nInserire il telefono:\t";
      gets(r.tele);
      f.write((char*) & (r.tele), sizeof(r.tele));
      cout<<"\nInserire l' indirizzo:\t";
      gets(r.addr);
      f.write((char*) & (r.addr), sizeof(r.addr));
      cout<<"\nInserire l' indirizzo di posta elettronica:\n";
      gets(r.mail);
      f.write((char*) & (r.mail), sizeof(r.mail));
      f.close();
       }
}
void print_file()
{
      f.open("c:\\rubrica.txt", ios::in|ios::out|ios::binary);
      cout<<"\nStampa a video del file:\n";
      f.clear();
      while(f.read((char*) & r, sizeof(r)))
      {
        cout<<"nome:\t"<<r.name<<endl;
        cout<<"cognome:\t"<<r.surn<<endl;
        cout<<"indirizzo:\t"<<r.addr<<endl;
        cout<<"citta':\t"<<r.city<<endl;
        cout<<"telefono:\t"<<r.tele<<endl;
        cout<<"mail:\t"<<r.mail<<endl;
           getch();
      }
      f.close();
      cout<<"\n---Fine del file---";
      getch();
}
int filesize()
{
   f.seekg(0, ios::end);
   int n=f.tellg();
   n=sizeof(rubrica);
   return n;
}
void search_bin()
{
   char aux[30];
   f.open("c:\\rubrica.txt", ios::in|ios::out);
   if(f.fail())
   {
      cout<<"\nFile non trovato";
      getch();
   }
   else
   {
      cout<<"\nInserire Cognome:";
      cin>>aux;
      cin.ignore(80, '\n');
      int trov=0;
      int inf=0, sup=filesize()-1;
      while(inf<=sup && !trov)
      {
         i=inf+sup/2;
         f.seekg(i*sizeof(rubrica), ios::beg);
         f.read((char*)&r, sizeof(r));
         if(strcmp(aux, r.surn)>0)
         {
            inf=i+1;
         }
         else
         {
            if(strcmp(aux, r.surn)<0)
            {
               sup=i-1;
            }
            else
            {
               trov=1;
            }
         }
      }
      if(trov)
      {
         cout<<"cognome:\t"<<r.surn<<"\n";
         cout<<"nome:\t"<<r.name<<"\n";
         cout<<"citta':\t"<<r.city<<"\n";
         cout<<"indirizzo:\t"<<r.addr<<"\n";
         cout<<"telefono:\t"<<r.tele<<"\n";
         cout<<"mail:\t"<<r.mail<<"\n";
      }
      else
      {
         cout<<"\nNon trovato";
      }
      getch();
   }
}

la compilazione la effettuo con il code::blocks v 1.0 che sfrutta il compilatore mingw.
e al momento della compilazione ottengo sempre questo:
Compiling: L:\informatica\06-07\RUBRICA2.CPP
In file included from C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/backward/iostream.h:31,
from L:\informatica\06-07\RUBRICA2.CPP:1:
C:/Programmi/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../../../include/c++/3.4.4/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
L:\informatica\06-07\RUBRICA2.CPP:183:2: warning: no newline at end of file
Linking console executable: L:\informatica\06-07\RUBRICA2.exe
Process terminated with status 0 (0 minutes, 7 seconds)
0 errors, 2 warnings

datemi una mano! please![/b]
amo l'informatica ed ovviamente la studio a scuola...ehi tu visita il mio sito internet www.quellicheilkaos.altervista.org
Avatar utente
vale461mito
Aficionado
Aficionado
 
Messaggi: 79
Iscritto il: dom giu 25, 2006 2:44 pm
Località: matera

Messaggioda Silver Black » sab mar 31, 2007 5:02 pm

Non vedo errori, solo avvisi (warnings). [...]
Vuoi togliere i warning?
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda vale461mito » sab mar 31, 2007 6:50 pm

si ok questo è vero, non ci sono errori ma solo warnings ma in compenso quando cerco di aprire il file, rubrica.txt, non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!e invece mi dice che non lo trova, mbo!
aaa aiuto!
amo l'informatica ed ovviamente la studio a scuola...ehi tu visita il mio sito internet www.quellicheilkaos.altervista.org
Avatar utente
vale461mito
Aficionado
Aficionado
 
Messaggi: 79
Iscritto il: dom giu 25, 2006 2:44 pm
Località: matera


Messaggioda Silver Black » dom apr 01, 2007 12:01 am

vale461mito ha scritto:non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!


Ehi, chi ti ha detto di scrivere il path in quel modo? (path = percorso, quindi è maschile). Usa:

Codice: Seleziona tutto
c:\rubrica.txt


E aggiungi un ritorno a capo a fine file rubrica.txt, così dovresti eliminare un warning.
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda Ices_Eyes » dom apr 01, 2007 11:18 am

Silver Black ha scritto:
vale461mito ha scritto:non riesco ad aprirlo, nemmeno se metto la path completa e cioè c:\\rubrica.txt;
eppure il file esiste!!


Ehi, chi ti ha detto di scrivere il path in quel modo? (path = percorso, quindi è maschile). Usa:

Codice: Seleziona tutto
c:\rubrica.txt


E aggiungi un ritorno a capo a fine file rubrica.txt, così dovresti eliminare un warning.

In realtà la newline alla fine del file deve metterla in rubrica2.cpp [:)]

Per quanto riguarda il file teoricamente, salvo nuove cose del, quando lo usavo io, bisognava mettere la doppia \ nel file, o, in alternativa, usare la / [:)]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda Silver Black » dom apr 01, 2007 12:39 pm

Sì certo, il rubrica.cpp! Ecco cosa si ottiene a lavorare il sabato sera! [:p]

E in effetti dovresti avere ragione anche sul doppio back slash, essendo infatti un carattere di escape speciale, dovrebbe essere raddoppiato.
Il mio C è proprio arrugginito! [acc2]
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia

Messaggioda vale461mito » mar apr 03, 2007 5:59 pm

forse non mi sono fatto capire bene da voi, comunque il problema è qui:

Codice: Seleziona tutto

void insert()
{

   f.open("rubrica.txt", ios::app);
   if(f.fail())
   {
      cout<<"\nErrore nell'apertura del file";
   }
.....



anche se metto il path completo cosi come mi avete suggerito voi, la situazione non cambia! se ne va sempre nel ramo if e mai nell'else nonostante il file sia presente, capito non riesco ad aprirlo nonostante abbia messo il file nella directory che specifico! spero di essere stato chiaro!
amo l'informatica ed ovviamente la studio a scuola...ehi tu visita il mio sito internet www.quellicheilkaos.altervista.org
Avatar utente
vale461mito
Aficionado
Aficionado
 
Messaggi: 79
Iscritto il: dom giu 25, 2006 2:44 pm
Località: matera

Messaggioda Silver Black » mar apr 03, 2007 6:34 pm

vale461mito ha scritto:anche se metto il path completo cosi come mi avete suggerito voi, la situazione non cambia! se ne va sempre nel ramo if e mai nell'else nonostante il file sia presente, capito non riesco ad aprirlo nonostante abbia messo il file nella directory che specifico! spero di essere stato chiaro!


Guarda questi due link:

- tutorial Input/Output with files in C++ (inglese)

- C++ I/O - Parte Terza (italiano)

Te gusta hombre? [;)]
Sergio Pappalardo aka Silver Black
https://www.silvercybertech.com
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1148
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Italia


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising