2012-04-22 3 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

도이 시도 ... 성공 가능성이 보인다

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

언급 한 다른 문제 외에도 사용자 이름과 암호를 동시에 보유하기 위해 하나의 변수 (input)를 사용하는 것 같습니다.

대신 :

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); 
if(strcmp((puser+i)->UserName, input)==0 && strcmp((puser+i)->Pwd, input)==0) 
+0

나는 전역 변수로 입력을했지만, 이제는 입력 1과 입력 2로 변경 했으므로 기본적으로 if (strcmp (puser-> UserName, input1) == 0 등 ...)하지만 여전히 작동하지 않습니다. .ok 나는 strncpy에 대해 무슨 뜻인지 안다. @michaelburr ... 나는 strcpy로 다시 바꿨다. @ jerrycoffin은 내가해야만하는 것은 일반적인 관리자 목록 암호와 관리자 암호를 저장하고있다. 5는 사용자 이름과 암호를 구성한 다음 누군가가 내 프로그램을 실행하려고 시도하는 것처럼 느껴지므로 로그인하려고 시도합니다. – lilvenus