Oppure

Loading
05/03/10 17:42
xxmarco94
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
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int contr, pass;
    ifstream f("pass.txt");
    
    cout<<"Password: ";cin>>pass;
    
    while (f.good()) {
          getline(f, contr); //dovrebbe leggere il file e poi inserire i dati nella variabile contr
                  if (pass==contr)
                     {
                     cout<<"Giusto!"
                     };
                  else
                      {
                      cout<<"Errato!";
                      }
                      }
    return EXIT_SUCCESS;
}

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?
aaa
05/03/10 18:15
nessuno
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 05/03/10 18: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à.
05/03/10 19:30
Poggi Marco
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:

#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <conio.h>

using namespace std; 

int main() 
{ 
    int contr, pass; 
    ifstream f("pass.txt"); 
    if (!f)
    {
        cout<<"\nImpossibile aprore il file !!!\n";
        return 1;
    } 
    else     
         {   
             cout<<"Password: ";cin>>pass;       
             f>>contr;
                  if (pass==contr) 
                     { 
                     cout<<"Giusto! "<<endl;
                     }
                  else 
                      { 
                      cout<<"Errato! "<<endl; 
                      } 
          }
    f.close();
    fflush(stdin);
    getchar();      
    return EXIT_SUCCESS; 
} 

Ultima modifica effettuata da Poggi Marco 05/03/10 19:35
aaa
05/03/10 19:41
xxmarco94
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 05/03/10 19:45
aaa
05/03/10 20:10
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
Ultima modifica effettuata da giuseppe93 05/03/10 20:10
aaa
05/03/10 20:32
nessuno
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à.
05/03/10 21:03
HeDo
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.
aaa
05/03/10 21:04
Poggi Marco
Postato originariamente da nessuno:

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:
#include "stdafx.h"
#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <conio.h> 
#include <string>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    string frase;
    ifstream f("pass.txt"); 
    if (!f) 
    { 
        cout<<"\nImpossibile aprore il file !!!\n"; 
        return 1; 
    } 
    else     
         {   
             f.getline(frase, 50); 
         } 
    f.close(); 
    fflush(stdin); 
    getchar();       
    return 0;
}


Ed ecco gli errori di compilazione:

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 *'
        with
        [
            _Elem=char,
            _Traits=std::char_traits
        ]
        Nessun operatore di conversione definito dall'utente è disponibile o è impossibile chiamare l'operatore
aaa