2012-04-22 6 views
-1

私は以前に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!"); 
}  
+2

'strcmp'は、入力が一致すると0を返します。 http://en.cppreference.com/w/cpp/string/byte/strcmp入力されたユーザ名を入力したパスワードで上書きしていますが... – DCoder

+2

'strncpy()'はおそらく最初の場所。それは文字列で動作するようには設計されていませんでした。それは必ずしもゼロ終端されていない文字配列で動作するように設計されています。あなたの文字列が終了していることを確認してください。 – pmg

+1

'(puser + i) - > UserName'とは何ですか?ユーザー名/パスワードを取得しようとするたびに異なるユーザープロファイルを使用するのはなぜですか?これがあなたが見ているバグの原因であることは明らかではありませんが、いずれにしても意味をなさないと思われます。私はあなたが 'rewind'を意味のある標準入力に適用できるとは信じていません(標準入力でも意味をなさない' fseek'を呼び出すのと同じです)。 –

答えて

0

もこれを試してみてください:

の代わり:

strncpy((puser+i)->UserName, "admin", strlen("admin")+1); 
    strncpy((puser+i)->Pwd, "password", strlen("password")+1); 

をあなたが行うことができます:

strcpy((puser + i)->UserName, "admin"); 
strcpy((puser + i)->Pwd, "password"); 

char password[10]; 
    char username[10]; 

    fgets(username,10,stdin); 
    rewind(stdin); 
    printf("Enter admin password:"); 
    fgets(password,10,stdin); 
その後、

と:

if(strcmp((puser+i)->UserName, username)==0 && strcmp((puser+i)->Pwd, password)==0) 
    { 
     /* correct username and password. Do something.. */ 
    } 

は今、あなたは、ユーザーが入力したユーザー名とパスワードを比較しています。

+0

ありがとうございました...私のプログラムはそれほど変わっていませんでしたが、あなたのものはきれいですが、問題は...私は今私の問題は私のループだと思う – lilvenus

+0

よく私のループは問題ではない、私は全体的にそれはまだ比較しないループを取り除く – lilvenus

2

上記の他の問題に加えて、ユーザー名とパスワードを同時に保持するために1つの変数(input)を使用しているようです。それが成功する可能性は低いようだ...

printf("Enter admin user name:"); 
fgets(input,10,stdin); 
rewind(stdin); 
printf("Enter admin password:"); 
fgets(input,10,stdin); 
if(strcmp((puser+i)->UserName, input)==0 && strcmp((puser+i)->Pwd, input)==0) 
+0

私はグローバル変数として入力しましたが、今は入力1と入力2に変更しましたので、基本的にはif(strcmp(puser-> UserName、input1)== 0などです。あなたがstrncpy @michaelburrについて何を意味するのか見てみましょう...私はstrcpyに戻しました..... @ jerrycoffin私がやるべきことは、一般管理者パスワードのストア管理者とパスワードです。 5はユーザー名とパスワードを作成して、誰かがログインしようとしているようなプログラムの動作を – lilvenus