xxmarco94 (Normal User)
Rookie
Messaggi: 28
Iscritto: 07/02/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++ |
#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?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/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à. |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/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++ |
#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 il 05/03/2010 alle 20:35 |
|
xxmarco94 (Normal User)
Rookie
Messaggi: 28
Iscritto: 07/02/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 |
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
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 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
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à. |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
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. |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
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:
Codice sorgente - presumibilmente C++ |
#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:
Codice sorgente - presumibilmente C/C++ |
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
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
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à. |
|