私は以前にstrncpyを使って何を保存したのかを比較する必要があります...私はstrncpyの部分が動作することを知っています、私は入力をpuser-> Username等と比較すると問題に遭遇します...strcmpの問題
int admin_signIn(struct profile *puser)
{
int i=0;
for(i=0;i<3;i++)
{
strncpy((puser+i)->UserName, "admin", strlen("admin")+1);
strncpy((puser+i)->Pwd, "password", strlen("password")+1);
printf("Enter admin user name:");
fgets(input,10,stdin);
rewind(stdin);
printf("Enter admin password:");
fgets(input,10,stdin);
//printf("the password is %s", puser->Pwd);
if(strcmp((puser+i)->UserName, input)==0 && strcmp((puser+i)->Pwd, input)==0)
{
printf("The Administrator username and password is incorrect, please try again\n");
}
else
{
printf("the info is good\n");
}
}
printf("max number of attepmpts exceded, goodbye!");
}
'strcmp'は、入力が一致すると0を返します。 http://en.cppreference.com/w/cpp/string/byte/strcmp入力されたユーザ名を入力したパスワードで上書きしていますが... – DCoder
'strncpy()'はおそらく最初の場所。それは文字列で動作するようには設計されていませんでした。それは必ずしもゼロ終端されていない文字配列で動作するように設計されています。あなたの文字列が終了していることを確認してください。 – pmg
'(puser + i) - > UserName'とは何ですか?ユーザー名/パスワードを取得しようとするたびに異なるユーザープロファイルを使用するのはなぜですか?これがあなたが見ているバグの原因であることは明らかではありませんが、いずれにしても意味をなさないと思われます。私はあなたが 'rewind'を意味のある標準入力に適用できるとは信じていません(標準入力でも意味をなさない' fseek'を呼び出すのと同じです)。 –