Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problemi lettura file
Forum - C/C++ - problemi lettura file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 18:42
Venerdì, 05/03/2010
Ciao a tutti, mi sto cimentando in un programma che mio papà mi ha chiesto di fargli e devo anche fare in modo che per accedere al programma venga inserita una password.
Prima di fare il programma vero e proprio ho provato a crearne uno per vedere se sono in grado di usare le password. Più o meno io ho capito come fare e così ho cominciato a scrivere il codice, che è questo
Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int contr, pass;
  10.     ifstream f("pass.txt");
  11.    
  12.     cout<<"Password: ";cin>>pass;
  13.    
  14.     while (f.good()) {
  15.           getline(f, contr); //dovrebbe leggere il file e poi inserire i dati nella variabile contr
  16.                   if (pass==contr)
  17.                      {
  18.                      cout<<"Giusto!"
  19.                      };
  20.                   else
  21.                       {
  22.                       cout<<"Errato!";
  23.                       }
  24.                       }
  25.     return EXIT_SUCCESS;
  26. }


Il problema è che mi dice "no matching function for call to `getline(std::ifstream&, int&)' " e mi segna errore sulla 15esima riga dove si usa il comando getline.
Qualcuno mi può aiutare?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:15
Venerdì, 05/03/2010
Non puoi usare un intero, ma un oggetto di classe string (del resto la password non sarà un numero ma una stringa).

Quindi devi includere

#include <string>

e dichiarare

string contr, pass;


Ultima modifica effettuata da nessuno il 05/03/2010 alle 19:15


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 20:30
Venerdì, 05/03/2010
Non è possibile neanche utilizzare direttamente un oggetto string.

Purtroppo, per getline() è necessario utilizzare un semplice vettore di caratteri.

Ho notato che il "formato" dell' istruzione getline è errato.
Devi inserire f.getline( contr, 50 )", ovviamente prima dovrai dichiarare char contr[ 80 ];

In alternativa, - se sei sicuro che il file contenga un numero intero - , puoi utilizzare l' operatore >> in questo modo:  f >> contr; .

Riporto il programma corretto:

Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.     int contr, pass;
  11.     ifstream f("pass.txt");
  12.     if (!f)
  13.     {
  14.         cout<<"\nImpossibile aprore il file !!!\n";
  15.         return 1;
  16.     }
  17.     else    
  18.          {  
  19.              cout<<"Password: ";cin>>pass;      
  20.              f>>contr;
  21.                   if (pass==contr)
  22.                      {
  23.                      cout<<"Giusto! "<<endl;
  24.                      }
  25.                   else
  26.                       {
  27.                       cout<<"Errato! "<<endl;
  28.                       }
  29.           }
  30.     f.close();
  31.     fflush(stdin);
  32.     getchar();      
  33.     return EXIT_SUCCESS;
  34. }



Ultima modifica effettuata da Poggi Marco il 05/03/2010 alle 20:35
PM Quote
Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 20:41
Venerdì, 05/03/2010
grazie mille sono riuscito a risolvere il problema.
Ora mi potreste dire come dovrei fare per far si che quando la password è corretta mi apra (per esempio il blocco note (questo lo so già fare)) e che mi chiuda il programma in cui inserivo la password?
Perchè praticamente io devo fare un programma che all'avvio mi chiede una password e se la password è giusta mi apre un altro programma chiudendo quello in esecuzione in cui si inseriva la password.

Ultima modifica effettuata da xxmarco94 il 05/03/2010 alle 20:45
PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 21:10
Venerdì, 05/03/2010
Ciao! per aprire un programma puoi usare la funzione system se lavori con dev c++ facendo system("programma"); al posto di programma devi mettere ovviamente il relativo percorso e ricordati che non puoi scrivere system("c:\file.exe"); ma devi fare system("c:\\file.exe"); poi per chiudere il programma iniziale basta mettere un return 0;
spero che non sia niente di serio il programma che devi fare per tuo padre... perchè obbiettivamente non è molto sicuro il tuo metodo

Ultima modifica effettuata da giuseppe93 il 05/03/2010 alle 21:10
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:32
Venerdì, 05/03/2010
Testo quotato

Postato originariamente da Poggi Marco:

Non è possibile neanche utilizzare direttamente un oggetto string.

Purtroppo, per getline() è necessario utilizzare un semplice vettore di caratteri.



Ma chi te lo ha detto?

Hai provato quello che ho scritto? Mi sa di no ...



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 22:03
Venerdì, 05/03/2010
Testo quotato

Postato originariamente da giuseppe93:

Ciao! per aprire un programma puoi usare la funzione system se lavori con dev c++ facendo system("programma"); al posto di programma devi mettere ovviamente il relativo percorso e ricordati che non puoi scrivere system("c:\file.exe"); ma devi fare system("c:\\file.exe"); poi per chiudere il programma iniziale basta mettere un return 0;
spero che non sia niente di serio il programma che devi fare per tuo padre... perchè obbiettivamente non è molto sicuro il tuo metodo



non funziona solo con dev...

concordo sul fatto della sicurezza.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:04
Venerdì, 05/03/2010
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da Poggi Marco:

Non è possibile neanche utilizzare direttamente un oggetto string.

Purtroppo, per getline() è necessario utilizzare un semplice vettore di caratteri.



Ma chi te lo ha detto?

Hai provato quello che ho scritto? Mi sa di no ...




Certo che ho provato!

Ecco il programma:
Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <conio.h>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10.  
  11. int _tmain(int argc, _TCHAR* argv[])
  12. {
  13.     string frase;
  14.     ifstream f("pass.txt");
  15.     if (!f)
  16.     {
  17.         cout<<"\nImpossibile aprore il file !!!\n";
  18.         return 1;
  19.     }
  20.     else    
  21.          {  
  22.              f.getline(frase, 50);
  23.          }
  24.     f.close();
  25.     fflush(stdin);
  26.     getchar();      
  27.     return 0;
  28. }



Ed ecco gli errori di compilazione:

Codice sorgente - presumibilmente C/C++

  1. g:\prog\vcpp\leggi file\leggi file\leggi file.cpp(26) : error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)': impossibile convertire il parametro 1 da 'std::string' a 'char *'
  2.         with
  3.         [
  4.             _Elem=char,
  5.             _Traits=std::char_traits
  6.         ]
  7.         Nessun operatore di conversione definito dall'utente è disponibile o è impossibile chiamare l'operatore


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:17
Venerdì, 05/03/2010
Testo quotato

Postato originariamente da Poggi Marco:

Certo che ho provato!



No ... non è quello il programma ... controlla meglio come è scritta la getline ...



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo