正しく動作していない(つまり、適切なユーザーIDとパスワードを入力していても間違ったユーザーIDとパスワードが表示される)C++ログインシステムをデバッグしようとしています。
登録すると、ログイン情報がバイナリファイルに保存され、ログイン時にそのファイル(ID.dat)が読み込まれ、一致するものがあるかどうかが確認されます。
これは私の高校のプロジェクトであり、私は本当にこれを修正しなければなりません。私は本当に、本当に長い時間のためにそれをしようとしてきました。考えられるエラーを指摘してください。ご協力ありがとうございました。C++でのログインシステムが動作しない
編集:私は、新しい機能を追加しましたが、
//Class for storing IDs
char Level;
class ID
{
public:
char username[20],pass1[20],pass2[20],IDtype,systemID[5];
int checkuser(char u[20])
{
return(strncmp(u,username,strlen(u)));
}
int checkpass(char p[20])
{
return(strncmp(p,pass1,strlen(p)));
}
};
//Registration function
void IDregister()
{
clrscr();
ID i;
ofstream fout;
fout.open("ID.dat",ios::app);
gotoxy(30,6);
cout<<"*--- Register ---*";
gotoxy(25,9);
cout<<" Enter User ID - ";
fgets(i.username,21,stdin);
gotoxy(25,11);
cout<<" Enter Password - ";
fgets(i.pass1,21,stdin);
do
{
cout<<"\n Re-enter Password - ";
fgets(i.pass2,21,stdin);
}while(strncmp(i.pass1,i.pass2,strlen(i.pass1))!=0);
cout<<"\n To register as Admin, type system ID below.\n Else press Enter ";
fgets(i.systemID,6,stdin);
if(strncmp(i.systemID,"#123#",5)==0)
i.IDtype='A';
else
i.IDtype='U';
fout.write((char*)&i,sizeof(i));
cout<<i.IDtype;
getch();
fout.close();
IDlogin();
}
//Log-in Function
void IDlogin()
{
clrscr();
int flag=1;
ID acc;
char usercheck[20],passcheck[20];
ifstream fin;
fin.open("ID.dat",ios::in);
gotoxy(30,7);
cout<<"*--- Log-in ---*";
gotoxy(25,10);
cout<<"Enter User ID - ";
fgets(usercheck,21,stdin);
gotoxy(25,12);
cout<<"Enter Password - ";
fgets(passcheck,21,stdin);
gotoxy(25,14);
while(!fin.eof())
{
fin.read((char*)&acc,sizeof(acc));
if(acc.checkuser(usercheck)==0&&acc.checkpass(passcheck)==0)
flag=0;
}
if(flag==0)
{
cout<<"Logged in successfully!";
Level=acc.IDtype;
getch();
mainscreen();
}
else
{
cout<<"Wrong User ID or Password";
getch();
initscreen();
}
}
デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
1.プロジェクトをC++で起動すると、 C++の文字列などを使用します。多くの初期化されていないデータがここにあります。 2.混合非標準ビジュアルライブラリ(clrscr、getchなど)と標準ストリームをデバッグするのは難しい。 –
なぜ 'C'関数を使用していて、客観的に優れた' C++ '関数を使用していませんか? –