2011-04-22 2 views
2

.txt 파일에서 사용자 이름과 암호를 가져와야하며이 작업을 정확하게 수행하는 데 어려움을 겪고 있습니다. 나는 이것을 무너 뜨리려고 노력할 것이다.txt 파일에서 사용자 이름과 암호 읽기

  1. 를 열고 사용자 이름
  2. 에서 파일
  3. 읽기 true 또는 사용자 이름이 경우는 false 사용자 이름
  4. 반환과 관련된 사용자 입력에 대해 암호를 비교하여 사용자 입력
  5. 에 대한 사용자 이름을 비교 및 비밀번호 일치

예, 숙제입니다. 그리고 USPS가 클래스 txt 도서를 제공하기를 기다리는 동안 fstream을 사용하는 방법을 배우고 있습니다. 당신의 도움은 대단히 감사합니다!

bool User::check(const string &uname, const string &pass) 
{ 
    //open the file 

    fstream line; 
    line.open("users.txt"); 

    //Loop through usernames 
     //If a username matches, check if the password matches 
} 

USERS.TXT 파일은 다음과 같다 : 여기

는 내가 지금까지 무엇을 가지고

ali87 8422 

ricq7 bjk1903 

messi buneyinnessi 

mike ini99ou 

jenny Y00L11A09 

end 
+0

마이크. 이 프로젝트의 "높은 수준"목표가 무엇이라고 생각하십니까? fstream을 조금 이해 한 것 같아요 ... 맞습니까? (선생님은 모든 과제에 "여분의 학습"을 넣는 것을 정말 좋아하고, 그들이 누구라고 생각하니?) – onaclov2000

답변

2

나는 다음과 가성을 생각한다 알고리즘이 더 좋은 옵션 일 수 있습니다.

    ,
  1. 입력 사용자 이름, 암호
  2. 파일 열기 스트림 (출구 경우 비 있음) 사용자 이름 일치
  3. 검색 스트림을 파일로 발견하는 경우
  4. , 저장 암호화 암호에 대해 암호화 입력 암호를 ​​비교합니다.
  5. 발견되면 성공을 반환하고, 그렇지 않으면 "사용자 이름을 찾을 수 없거나 잘못된 비밀번호입니다.".

3 단계에서 각 줄 버퍼를 문자열 컨테이너에 저장할 수있는 문자열에 저장합니다. 이 처리 중에 이상적으로 문자열을 사용자 이름, 암호 쌍으로 분리 한 다음 std :: map에 저장할 수 있습니다. 그런 다음 map.find (사용자 이름 입력) == 입력 암호를 ​​통해 액세스하십시오.

로그인 프로세스 기간 이상으로지도를 저장할 필요가 없으면지도를 삭제해야합니다 (아마도 로컬 함수 변수로 사용).

프로그램에 실제로 목적이있는 경우 이상적입니다. 그렇지 않으면 정상적으로 작동합니다.

+0

나는 확실히 모른다.하지만 fstream을 배우는 사람이라면, 나는 그들이 예쁘다고 생각할 것이다. 프로그래밍이나이 언어에 익숙하지 않지만 내가 질문을 읽을 때 가장 먼저 생각한 것은 해시 테이블과 매우 흡사하다는 것입니다. 나는 당신의 대답을 좋아하지만 마이크가 어떻게해야하는지 더 잘 알고있을 지 모르지만 좋은 습관이 될 것입니다. 나는 upvoted 나중에! – onaclov2000

1

나는 iostream, fstreamcstring을 포함했다. namespace std을 사용합니다.

int main() 
{ 
char login_password[20]; 
char stored_password[20]; 
char login_username[20]; 
char stored_username[20]; 

fstream pull("users.txt",ios::in); 
if (!pull) { 
    cout<<"File not loaded!"<<endl; 
    return -1; 
} 
cout<<"Username: "; 
cin>>login_username; 
while(strcmp(login_username,stored_username)){ 

//if login and stored usernames are equal, function strcmp returns 0, 
//at first loop they are certainly not, so it is: while(1) 

    pull>>stored_username; 
    if(pull.eof()){ //if it is the end of file 
     cout<<"Username does not exist. "<<endl; 
     return -1; 
    } 
} 
pull>>stored_password; 

//since username and password are in the same line, password next to 
//correctly inputted username is saved in stored_password 

cout<<"Password: "; 
//now user enters password to confirm username 
cin>>login_password; 
while(strcmp(stored_password,login_password)){ 
    cout<<"Wrong password. "<<endl; 
    cout<<"Try again: "; 
    cin>>login_password; 
} 
cout<<"Login successful."<<endl; 
return 0; 
} 

users.txt

은 다음과 같습니다

  • Lena84을
  • Doris20는

사용자 이름과 암호를 사이에 하나 개의 공백이를 kjkszpj uzumymw (또한 글 머리 기호없이)

관련 문제