2016-12-17 28 views
0

私は最近、C++のオンライン学習を開始し、このコードの作業を開始しましたが、コンパイラが私に投げているエラーの助けが必要です。 基本的には、最初に「フラグ」変数を使用してパスワードを取得し、暗号化された形式でパスワードをテキストファイルに書き込むだけで、ユーザーからパスワードを取得したいだけです。 ユーザが初めてログインしていてパスワードが保存されている場合は、暗号化されたテキストを読み込み、解読してユーザが入力したパスワードと等しいかどうかを確認します。C++暗号化と復号化のソースコード

#include<iostream> 
#include<string.h> 
#include<fstream> 
using namespace std; 
char encryptpass(char *pass) //function to encrypt 
{ 

    for(int i=0; pass[i] != '\0'; ++i) 
    char enpass[10]= ++pass[i]; 
    return(enpass); 


} 
char decryptpass(char *str) // function to decrypt 
{ 
for(; str!='\0'; ++str) 
char depass[10]= --str; 
return(depass); 

} 

int main()    // main function 
{ 
int flag=0; 
if(flag=0) 
{ 
    cout<<"enter your password"; 
    char pass[10]; 
    cin>>pass; 
    fstream file("userpass.txt",ios::in | ios::out); 
    file<<enpass[10]; 
} 
else 
{ 
    cout<<"enter password"; 
    cin>>pass; 
    bool check=false; 
    static char str[10]; 
    file.seekg(ios::beg); 
    file >> str; 
    file.close(); 
    decryptpass(str); 

    if(pass=depass) // decrypted password is equal to input password ? 
    { 
     check=true;  // set boolen value to true 
    } 
else 
{ 
    cout<<"incorrect password"; 
} 
    return(0); 
} // end of main 

コンパイラがこれらのエラーを与える-----

warning : In function 'void encryptpass(char*)': 
line 9 error: array must be initialized with a brace-enclosed initializer 
line 9 warning: unused variable 'enpass' [-Wunused-variable] 
line 10 error: 'enpass' was not declared in this scope 
line 10 error: return-statement with a value, in function returning 'void' [-fpermissive] 
warning : In function 'void decryptpass(char*)': 
line 17error: array must be initialized with a brace-enclosed initializer 
line 17 warning: unused variable 'depass' [-Wunused-variable] 
line 18 error: 'depass' was not declared in this scope 
line 18 error: return-statement with a value, in function returning 'void' [-fpermissive] 
warning : In function 'int main()' 
line 25 warning: suggest parentheses around assignment used as truth value [-Wparentheses] 

line 31 error: 'enpass' was not declared in this scope 
line 36 error: 'pass' was not declared in this scope 
line 39 error: 'file' was not declared in this scope 
line 43 error: 'depass' was not declared in this scope 
+2

あなたは聞いたことはありませんが、それはパスワードを行う正しい方法ではないことを知っておくべきだと思います。コード自体について...このような混乱には決していかない方法を学ぶ。ちょっとしたコードを書いてプロジェクトを始めましょう。コンパイルして正しいことをするためにちょっとしたことをしてください。 (この時点で "正しいこと"はそれほどではありません)もう少し追加し、コンパイルしてテストしてください。そんなことを続けていくなど。いったんあなたがそれを掛けてしまえば、あなたが変更した最後のものになるので、 "エラー"は簡単に見つかるでしょう。 –

+0

私は確かに提案された方法に従ってコードを書き直すだろう。提案に感謝します。 – binu23

答えて

1

あなたのコンパイラの出力は、例えば、ソースに合わせて、表示されません。戻り値の型はencryptpassであり、コンパイラによればvoidである。

最初のエラーは、char empass[10]char配列のサイズが10の宣言であるが、charの値のように使用しているためです。だから、最初のforループの前にそれを宣言:

char empass[10]; 

次にforループでは、あなたが

empass[i] = ++pass[i]; 

は、しかし、あなたのコードは、パスワードを変更されてエンコードされたパスワードのi番目の要素を設定します関数に渡された:++pass[i]、インクリメントpass[i]。それは本当にあなたが望むものですか?

+0

暗号化機能では、パスワードが増えてからテキストファイルに書き込まれると思っていました。パスワードの解読は再び元のテキストに減分される。論理が間違っていますか? – binu23

+0

コンパイラの出力とコードの不一致は、関数の戻り値の型を変更してエラーを解決しようとしたために発生します。 – binu23

+0

ロジックに問題はありませんが、コードにはかなりの問題があります。 古いバージョンのコードからコンパイラの出力を投稿するのはなぜですか?ここで私が[あなたが投稿したコードをコンパイルする](http://ideone.com/Z0hs61)のときに何が起こるかです。 –